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

为接受函数的新数据类型创建haskell构造函数,haskell,parameters,pattern-matching,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 do

我想创建一个可以接受函数的新数据类型。 我知道这是可行的:

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 
所以我可以这样使用它:

data Bar = Bar (Int Int Int) Int Int --This does not compile
doCalc :: Bar -> Int 
doCalc (Bar func x y) = (func x y) + 100 

我的问题是如何在我的数据类型中声明构造函数来实现这一点?

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

尝试:


您的
doCalc
函数是正确的,将与新版本一起使用。

请注意
foo
的第一个参数的类型是
(Int->Int->Int)
-函数的类型,它接受两个
Int
并返回另一个
(Int-Int)
不是合法的Haskell类型(因为
Int
是一种具体类型,而不是类型构造函数,比如
可能

尝试:


您的
doCalc
函数是正确的,将与新版本一起使用。

请注意
foo
的第一个参数的类型是
(Int->Int->Int)
-函数的类型,它接受两个
Int
并返回另一个
(Int-Int)
不是合法的Haskell类型(因为
Int
是一种具体类型,而不是类型构造函数,比如
可能

尝试:


您的
doCalc
函数是正确的,将与新版本一起使用。

请注意
foo
的第一个参数的类型是
(Int->Int->Int)
-函数的类型,它接受两个
Int
并返回另一个
(Int-Int)
不是合法的Haskell类型(因为
Int
是一种具体类型,而不是类型构造函数,比如
可能

尝试:

您的
doCalc
功能正确,可以在新版本中使用