我想创建一个可以接收函数的新数据类型。 我知道这有效:
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
我的问题是如何在我的数据类型中声明构造函数来执行此操作?
答案 0 :(得分:3)
请注意foo
的第一个参数是(Int -> Int -> Int)
类型 - 一个函数的类型,它需要两个Int
并返回另一个(Int Int Int)
。 Int
不是合法的Haskell类型(因为Maybe
是具体类型而不是类型构造函数,如data Bar = Bar (Int -> Int -> Int) Int Int
)。
尝试:
doCalc
您的{{1}}功能正确,可以使用新版本。