別の単純なプログラミング言語用に Haskell でインタープリターを作成する過程で、Haskell でのタイピングを学ぶときに頭を壁にぶつけていることに気づきます。
2 つのカスタム データ型があります
data Expr
= Var Var
| NumE Int
| NilE
| ConsE Expr Expr
| Plus Expr Expr
| Minus Expr Expr
| Times Expr Expr
| Div Expr Expr
| Equal Expr Expr
| Less Expr Expr
| Greater Expr Expr
| Not Expr
| Isnum Expr
| And Expr Expr
| Or Expr Expr
| Head Expr
| Tail Expr
| Call String
deriving (Show, Read)
data Val = Num Int | Nil | Cons Val Val
deriving (Eq, Show, Read)
関数 interpret_expr を使用して、これらのオプションを解釈するケースを書き始めています。
interpret_expr :: Vars -> Expr -> Val
interpret_expr vars@(Vars a b c d) (NumE integer) = integer
しかし、これは、式「整数」の実際の型「Int」と予想される型「Val」を一致させることができなかったと不平を言います。しかし、私はそれを何かばかげたものに変更するとしましょう
interpret_expr :: Vars -> Expr -> Val
interpret_expr vars@(Vars a b c d) (NumE 'a') = 'a'
次に、「a」で、予想される型「Int」と実際の型「Char」を一致させることができないと不平を言います。今、それはINTを望んでいます?????? 私は本当に何を言うべきかわかりません.NumEに整数と見なすことができる変数を提供するのと同じくらい簡単だと本当に思っていました. 私は何を間違っていますか?