我有这个片段,你能解释一下是做什么的,特别是>> =?
instance Monad (State s) where
return a = State $ \s -> (a, s)
State st >>= f = State $ \s ->
let (a, s') = st s
in runState (f a) s'
Run Code Online (Sandbox Code Playgroud)
最终你能以更清晰的形式写出来吗?谢谢
我想>>=为Write monad 定义运算符.我尝试了类似的东西,但它不起作用(不编译).我可以得到一些帮助吗?谢谢
newtype Writer a = Writer { runWriter :: (a, [String]) }
instance Monad Writer where
return = Writer
Writer m >>= f = Writer $ \r ->
(runWriter (f m) r)
Run Code Online (Sandbox Code Playgroud)
我明白了:
Couldn't match type ‘a’ with ‘(a, [String])’
Run Code Online (Sandbox Code Playgroud)
我在返回行时遇到此错误,但也>>=没有很好地定义,我正在努力使其正确.
如何修改以下功能,使列表短于搜索索引的情况将导致错误.
elementAt::Int -> [Int] -> Int
elementAt = Data.Foldable.foldl (\x y -> if x == 0 then y else x-1)
Run Code Online (Sandbox Code Playgroud)
1是第一个元素的索引
以下Haskell函数的签名是什么:
fix f = f (fix f)
Run Code Online (Sandbox Code Playgroud)
a)((a-> b) - > a-> b) - > a-> b
b)签名无法合成
c)(a-> a) - > a
谢谢!