首页 > 解决方案 > 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

标签: haskell

解决方案


您的函数正在返回measure ameasure b当您希望它返回时ab


推荐阅读