为接受函数的新数据类型创建haskell构造函数

时间:2014-11-11 15:02:50

标签: haskell parameters pattern-matching

我想创建一个可以接收函数的新数据类型。 我知道这有效:

foo :: (Int -> Int -> Int)->Int->Int->Int
foo func x y = (func x y) + 100

所以你可以这样做:

foo (+) 5 8 --output is 113

现在我想做同样的事情,但是对于这样的自定义数据类型:

data Bar = Bar (Int Int Int) Int Int --This does not compile

所以我可以像这样使用它:

doCalc :: Bar -> Int 
doCalc (Bar func x y) = (func x y) + 100 

我的问题是如何在我的数据类型中声明构造函数来执行此操作?

1 个答案:

答案 0 :(得分:3)

请注意foo的第一个参数是(Int -> Int -> Int)类型 - 一个函数的类型,它需要两个Int并返回另一个(Int Int Int)Int不是合法的Haskell类型(因为Maybe是具体类型而不是类型构造函数,如data Bar = Bar (Int -> Int -> Int) Int Int )。

尝试:

doCalc

您的{{1}}功能正确,可以使用新版本。