Haskell函数式编程,函数作为参数
我正在训练功能性 Haskell 并且无法理解这有什么问题:
maxBy :: (a -> Int) -> a -> a -> a
maxBy measure a b = max (measure a) (measure b)
以下是此 maxBy 函数如何工作的示例:
maxBy (*2) 3 5 ==> 5
maxBy length [1,2,3] [4,5] ==> [1,2,3]
maxBy head [1,2,3] [4,5] ==> [4,5]
错误信息是:
无法将预期类型 'a' 与实际类型 'Int' 匹配 'a' 是一个刚性类型变量,受以下类型签名约束:maxBy :: forall a。(a -> Int) -> a -> a -> a
回答
您的函数正在返回measure a或measure b当您希望它返回时a或b。