我有一个类型为first
的函数Int -> [a] -> (Error ([a],[a]))
和一个类型为second
的第二个函数[a] -> [a] -> [a]
我正在尝试使用上述函数制作第三个函数。
我对此函数的类型是:[Int] -> [a] -> Error [a]
我已经被赋予这些类型以便解决它们。
这就是我的尝试:
last :: [Int] -> [a] -> Error [a]
last (x:xs) list = second (first x list)
您可以将使用错误功能的函数的输出传递给其他人吗?
答案 0 :(得分:3)
假设Error
是error monad,您可以使用monadic绑定运算符(>>=
)和uncurry
函数:
z (x:xs) list = F x list >>= return . uncurry Q
uncurry
将Q从具有两个参数(也称为curried函数)的函数转换为对上的函数。这意味着uncurry Q :: ([a], [a]) -> [a]
bind运算符从monad中获取一个值并将其传递给monadic函数。这里我们提取F
返回的Error monad的值并将其传递给Q
,现在变成了一对monadic函数,可以在一对列表上工作,感谢return
和uncurry
。