Git clone ведет к удаленным и неотслеживаемым файлам

Это заявленное предложение монады (AMP). Теперь, когда вы объявляете что-то как Monad, вы также должны объявлять его как Applicative (и, следовательно, Functor). Математически каждая монада является аппликативным функтором, поэтому это имеет смысл.

Вы можете сделать следующее, чтобы удалить ошибку:

instance Functor Wrap where
  fmap f (Wrap x) = Wrap (f x)

instance Applicative Wrap where
  pure = Wrap
  Wrap f <*> Wrap x = Wrap (f x)

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

Редактировать: Возможно, я должен более четко указать, что это недавняя вещь ? Ранее вы использовали код, который вы использовали, но с последними версиями GHC вы получите сообщение об ошибке.

Изменить: Следующие объявления должны работать для любой монады:

import Control.Applicative -- Otherwise you can't do the Applicative instance.
import Control.Monad (liftM, ap)

instance Functor ??? where
  fmap = liftM

instance Applicative ??? where
  pure  = return
  (<*>) = ap

В зависимости от рассматриваемой монады может быть возможны более эффективные реализации, но это простая отправная точка.

10
задан Community 23 May 2017 в 11:46
поделиться