Это компилируется отлично:
type List a = [a]
Но когда я ввожу ограничение класса, компилятор просит включить RankNTypes
:
type List2 a = Num a => [a]
После включения этого расширения он компилируется в порядке. Почему это расширение требуется для компиляции кода?
Изменить: для чего мне нужно ограничение в первую очередь?
Я изучал этот тип Lens (type RefF a b = Functor f => (b -> f b) -> (a -> f a)
) из этого сообщения и выяснил, что на самом деле он нуждался в RankNTypes
из-за ограничения Functor
.