我要通过国家单子here,我想要实现: import Control.Monad.Reader
import Control.Monad.Writer
import Control.Monad.State
type Stack = [Int]
pop :: State Stack Int
pop = State $ (x : xs) -> (x, xs)
不过,我发现了以下错误:
我正在通过Monad Transformers,我了解它们的主要作用是提供一个monadic容器来容纳不同类型的monads,它提供了一个通用接口,可以在该接口中操作计算中的“嵌套”单子。 我已经尝试实现自己的变压器: data CustomTransformer a = CustomTransformer
class TransformerClass m a where
lift
结果哈斯克尔玩,现在我试图创建一个像 keepValue :: (Monad m) => m a -> (a -> m b) -> m a
功能具有以下语义:它应该单子值适用于一个功能,它的回报第二个单子,并保持结果第一个单子,但第二个 的效果我Maybe单子的情况下,有一个工作功能: keepValueMaybe :: Maybe a -> (a -> Maybe b) -> Maybe a
对环境共享加上确定性的规范“Monad的实例”如下(使用伪哈斯克尔,因为Haskell的Data.Set当然不是的,一元): eta :: a -> r -> {a} -- '{a}' means the type of a set of a's
eta x = \r -> {x}
bind :: (r -> {a}) -> (a -> r -> {b}) -> r -> {b}
m `b