, что проблема со следующим кодом:Haskell IO тип функции рассогласования
nextMatch :: (a -> Bool) -> [IO a] -> (IO a, [IO a])
nextMatch f (x:xs) = do
s <- x
if f s then (return x, xs)
else nextMatch f xs
Ошибка компиляции говорит:
src\Main.hs:364:10:
Couldn't match expected type `(IO a, t0)' with actual type `IO a'
In a stmt of a 'do' block: s <- x
In the expression:
do { s <- x;
if f s then (return x, xs) else nextMatch f xs }
In an equation for `nextMatch':
nextMatch f (x : xs)
= do { s <- x;
if f s then (return x, xs) else nextMatch f xs }
Я хочу функцию, которая ищет список на матч и возвращает согласованный элемент плюс оставшийся список, как кортеж.
Я еще совсем новичок в Haskell, так что эта проблема может быть что-то очень простое ...
Спасибо! Chris
Замечание общего порядка. Монадические аргументы (такие как 'IO [a]' или ваш '[IO a]') - это почти всегда плохая идея. Непристойный код обычно принимает чистые аргументы, используя do-notation или '>> =', чтобы применить их к монадическим значениям. – isturdy