我正在編寫這個小程序,基本上是爲了將每個輸入標記標識爲operator/parenthesis/int。Haskell中的Tokenizer標識符
不過,我遇到了一個問題,說明
Not in scope: data constructor `Integer'
這裏是我到目前爲止(Data.Char
只定義isDigit
,沒有別的)
import Data.Char (isDigit)
data Token = TPlus | TTimes | TParenLeft | TParenRight | TNumber Integer | TError
deriving (Show, Eq)
tokenize :: String -> [Token]
tokenize [] = []
tokenize (c:cs)
| c == '+' = TPlus : tokenize cs
| c == '*' = TTimes : tokenize cs
| c == '(' = TParenLeft : tokenize cs
| c == ')' = TParenRight : tokenize cs
| isDigit c = TNumber Integer (read c) : tokenize cs
| otherwise = TError : tokenize cs
一些示例預期輸出:
*Main> tokenize "(1 + 2)"
應該給
[TParenLeft,TNumber 1,TPlus,TNumber 2,TParenRight]
和
*Main> tokenize "abc"
應該期望TError
,但我越來越
[TError,TError,TError]
,如果任何人都可以在這兩個問題提供一些線索我會很感激。
我試圖擦除「整數」,現在我得到無法匹配預期的類型'字符串'推斷的類型'字符' – Walle