Ошибка получения монады Newtype

Я пытаюсь установить приложение Termite - Util, но получаю эта ошибка в строке 14

newtype CE m a = CE {unCE :: m a} deriving (Monad)

Ошибка говорит:

ContextError.hs: 14: 45: Нет экземпляра для (Applicative (CE m)), возникающего из предложения 'производного' объявления типа данных Возможное исправление: используйте автономное объявление 'производного экземпляра', чтобы вы могли указать контекст экземпляра самостоятельно При создании экземпляра для (Monad (CE m))

Я уже пробовал использовать решение, предложенное в CIS 194. : Домашнее задание 7

добавив это:

экземпляр Applicative (CE m), где pure = return (‹*>) = ap

но я снова получаю эту ошибку

ContextError.hs: 14: 45: Нет экземпляра для (Functor (CE m)), возникающего из предложения 'производного' объявления типа данных Возможное исправление: используйте автономное объявление 'производного экземпляра', чтобы вы могли указать контекст экземпляра самостоятельно При создании экземпляра для (Monad (CE m))

Я действительно не знаю, как действовать, я новичок в Haskell

Заранее спасибо.


person Agustin Larreinegabe    schedule 20.06.2017    source источник
comment
Насколько я знаю, это потому, что база изменилась: теперь Monad требует, чтобы тип был Applicative.   -  person Willem Van Onsem    schedule 20.06.2017
comment
Вероятно, вы захотите использовать deriving (Functor, Applicative, Monad) вместе. Несколько лет назад этого не требовалось, но теперь это необходимо.   -  person chi    schedule 20.06.2017
comment
Спасибо .. Работает с deriving (Functor, Applicative, Monad)   -  person Agustin Larreinegabe    schedule 20.06.2017


Ответы (1)


В ghc 7.10.1 предложение AMP имело место. До этого вы могли определить экземпляр Monad без экземпляра Applicative, после 7.10.1 вы должны определить Functor и Applicative, если хотите определить Monad.

https://wiki.haskell.org/Functor-Applicative-Monad_Proposal

person user8242965    schedule 03.07.2017