如何在haskell中调用此函数?

时间:2016-09-24 00:16:36

标签: haskell

我有类似这样的类型函数

function :: Eq a => a -> (b -> c -> a) -> b -> [(d,c)] -> Bool

但我不能称之为。任何人都可以给我一个例子:例如函数a b c带有一个例子吗?

2 个答案:

答案 0 :(得分:1)

这种类型非常普遍,很难推断出该功能的实际功能。但是,由于abcd几乎没有约束,所以让我们举例说明它们都满足Int

function (3::Int) (+) 5 [(1,2), (3,4)]

第一个参数必须是a类型,唯一的约束是它是Eq的实例。 3 :: Int满足了这一要求。

第二个参数只需要是一个返回Int的双参数函数。 (+)满足了这一要求,同时也修复了b ~ c ~ Int

第三个参数也必须是b ~ Int类型。

对于任何类型[(d, Int),最后一个参数只需要是d]类型的列表。我们只传递一对Int s。

的列表

答案 1 :(得分:1)

看起来你有一些复杂的功能,它使用辅助函数检查关联列表中的成员资格。

您提供的功能:

function :: Eq a => a -> (b -> c -> a) -> b -> [(d,c)] -> Bool

采取三个论点:

  • 要比较a
  • 的元素
  • 辅助函数b -> c -> a
  • 辅助函数b的参数,
  • 元组列表[(d, c)]

然后,您提供的类型的一个可能功能是:

function :: Eq a => a -> (b -> c -> a) -> b -> [(d,c)] -> Bool
function a f b ((_,c):rest) = ((f b c) == a) || (function a f b rest
function a f b rest         = False

通过忽略元组的第一个元素并将辅助函数应用于元组的第二个参数来检查列表中的成员资格。

虽然这个功能看起来很复杂,但你可以用一个相当简单的例子来运行它

function True (==) 0 [("a", 0), ("b",1)]

在上面的示例中,我们正在使用0辅助函数查找(==),并检查辅助函数是否返回True