short :: Val -> Exp -> Error Val
Haskell インタープリターという名前で呼び出しを作成しており、式に適用された値を評価する関数を実装したいと考えています。短絡ブール二項演算子の 2 番目の引数 (つまり((&&) False)
and 、またはユニット ラムダ ( ) 抽象化((||) True))
に渡される引数) を評価したくありません。\() -> ...
Haskell などの怠惰な言語では、Prelude に組み込まれた短絡ブール二項演算子が得られることを私は知っています。私は次のようなことができると考えていました:
short :: Val -> Exp -> Error Val
short (Partial (&&) False) = False
-- Making use of Partial Oper Val that is defined in Val
しかし、型エラーが発生することはすでにわかっています。正確に何をすべきかわかりません。助言がありますか?
追加の定義:
data Val = VUnit | VNil
| VN Int | VB Bool | VOp Oper
| Partial Oper Val
| VLamUnit Exp (Env Val)
| VLam String Exp (Env Val)
| VListBool [Bool]
| VListInt [Int]
data Exp = Unit | Nil
| N Int | B Bool | Var String | Op Oper
| App Exp Exp
| LamUnit Exp
| Lam String Exp
| If Exp Exp Exp
| Let [(String, Exp)] Exp
data Error a = S a
| Error String