ラムダ式を使用している場合、幸せなプロダクションルールでその場で式の値を計算することはできません。
たとえば、このコード
Exp : let var '=' Exp in Exp { \p -> $6 (($2,$4 p):p) }
| Exp1 { $1 }
Exp1 : Exp1 '+' Term { \p -> $1 p + $3 p }
| Exp1 '-' Term { \p -> $1 p - $3 p }
| Term { $1 }
Term : Term '*' Factor { \p -> $1 p * $3 p }
| Term '/' Factor { \p -> $1 p `div` $3 p }
| Factor { $1 }
Factor
: int { \p -> $1 }
| var { \p -> case lookup $1 p of
Nothing -> error "no var"
Just i -> i }
| '(' Exp ')' { $2 }
http://www.haskell.org/happy/doc/html/sec-using.htmlからは機能しません。
または、より正確には、エラー メッセージが表示されました
No instance for (Show ([(String, Int)] -> Int))
arising from a use of `print'
Possible fix:
add an instance declaration for (Show ([(String, Int)] -> Int))
In a stmt of an interactive GHCi command: print it
何を変更しなければならないかを説明していただければ幸いです。
ラムダ式と環境変数 p と関係があるはずです。
データ型を使用しているときは、すべて問題ありません。