我正在尝试运行它
newtype Test a = Test (Int, a)
instance Monad Test where
Test (_, []) >>= k =
k []
Test (_, a) >>= k =
k a
return a =
Test (0, a)
我得到了错误:
Couldn't match expected type `a' with actual type `[t0]'
`a' is a rigid type variable bound by
the type signature for >>= :: Test a -> (a -> Test b) -> Test b
at C:\Users\david.phillips\Documents\code\test.hs:4:5
In the pattern: []
In the pattern: (_, [])
In the pattern: Test (_, [])
当我尝试使用 case 语句而不是 >>= 的 2 个版本时,我得到了类似的错误。
我对haskell还很陌生,不明白为什么这不起作用。
编辑:对不起,这是一个不好的例子。假设 >>= 的第一个定义给出了不同的输出。