除了创建对列表进行简单操作的函数之外,我对haskell非常陌生。我想要创建一个列表,其中包含Int类型的东西和Int -> Int -> Int类型的函数。
以下是我尝试过的:
data Token = Value Int | Operator (Int -> Int -> Int)
tokens :: [Token]
tokens = [12, (+)]但是我得到了以下错误
Couldn't match expected type `Token'
with actual type `Integer -> Integer -> Integer'
In the expression: (+)
In the expression: [12, (+)]
In an equation for `tokens': tokens = [12, (+)]我不知道为什么这不管用,谁能给我指明正确的方向吗?
发布于 2014-08-07 04:08:19
您需要使用构造函数来获得Token类型的值。例如,12不是Token类型,而是Int类型(好,Num a => a)。类似地,(+)不是一个令牌,而是一个函数Int -> Int -> Int。注意Token /= Int -> Int -> Int。
幸运的是,您已经定义了一些构造函数,如Value :: Int -> Token和Operator :: (Int -> Int -> Int) -> Token。所以利用我们得到的信息:
tokens :: [Token]
tokens = [Value 12, Operator (+)]https://stackoverflow.com/questions/25173913
复制相似问题