Это мое определение функции any'
any' :: (t -> Bool) -> [t] -> Bool
any' f = foldl' step False
where step :: Bool -> t -> Bool
step b x | f x = True
| otherwise = b
Я получаю эту ошибку при загрузке в объятиях:
ERROR "folds.hs":65 - Inferred type is not general enough
*** Expression : step
*** Expected type : Bool -> a -> Bool
*** Inferred type : Bool -> _7 -> Bool
... и это в ghci:
folds.hs:65:27:
Couldn't match expected type `t' with actual type `t1'
`t' is a rigid type variable bound by
the type signature for any' :: (t -> Bool) -> [t] -> Bool
at folds.hs:62:9
`t1' is a rigid type variable bound by
the type signature for step :: Bool -> t1 -> Bool at folds.hs:64:22
In the first argument of `f', namely `x'
In the expression: f x
In a stmt of a pattern guard for
an equation for `step':
f x
Когда я удаляю определение типа шага, оно работает нормально, поэтому мой вопрос... Есть ли способ правильно написать это определение типа, или я имею дело с одной из тех ситуаций, когда локальные функции не могут быть явно типизированы?