为接受函数的新数据类型创建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
功能正确,可以在新版本中使用