Есть ли способ дальнейшего ограничения контекста существующего класса типа?Howto дополнительно ограничивает существующий класс типа в Haskell
Например, тип класса Functor
:
class Functor f where
fmap :: (a -> b) -> f a -> f b
Это определение класса не обеспечивает a
или b
, чтобы быть элементом Show
. Также этот тип класса является классом, который включен мной, поэтому я не могу повлиять на определение классов. Возможно ли, что позже разрешите только a
и что b
, которые являются членами Show
?
Было бы очень интересно услышать, почему вы хотите иметь искусственные ограничения не оправдываются кодом. Возможно, есть недоразумения, которые могут быть решены. – Ingo
Ограничения обычно помещаются на функции, а не на данные/типы. Причина в том, что вы никогда не узнаете, что вам нужно. Допустим, вы используете «ShowFunctor» от Daniel. Вы не можете сделать его аппликативным (и, следовательно, монадой), потому что аппликаторы должны иметь возможность обертывания функций, а функция не имеет экземпляра show. – mb14