Ошибка создания монады Newtype

avatar
Agustin Larreinegabe
20 июня 2017 в 08:16
855
1
3

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

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

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

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

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

добавив это:

экземпляр Applicative (CE m), где чистый = возврат (<*>) = ап

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

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

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

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

Источник
Willem Van Onsem
20 июня 2017 в 08:52
2

Насколько я знаю, это потому, что база изменилась: теперь Monad требует, чтобы тип был Applicative.

chi
20 июня 2017 в 09:33
7

Вероятно, вы захотите использовать deriving (Functor, Applicative, Monad) вместе. Несколько лет назад этого не требовалось, а сейчас есть.

Agustin Larreinegabe
20 июня 2017 в 11:44
0

Спасибо.. Он работает с deriving (Functor, Applicative, Monad)

Ответы (1)

avatar
user8242965
3 июля 2017 в 06:17
2

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

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