Есть ли способ дополнительно ограничить контекст существующего класса типов?
Например, класс типов Functor
:
class Functor f where
fmap :: (a -> b) -> f a -> f b
Это определение класса не требует, чтобы a
или b
были элементом Show
. Также этот класс типов является классом, который я включил сам, поэтому я не могу влиять на определение классов. Можно ли позже разрешить только те a
и те b
, которые являются членами Show
?
ShowFunctor
из ответа Дэниела. Вы не можете сделать его аппликативным (и, следовательно, монадой), потому что аппликативы должны иметь возможность обертывать функции, а функция не имеет экземпляра show. - person mb14   schedule 07.06.2015