没有实例(显示([(字符串,整数)] - >智力))(No instance for (Sh

2019-10-29 14:14发布

来计算在幸福的生产规则运行中的表达式的值,如果我使用的lambda表达式不起作用。

例如这段代码

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不起作用。

以上precisly我已经有了一个错误信息

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

这将是很好,如果你能解释我什么,我必须改变。

它必须有一些做的lambda表达式和环境变量p。

当我使用的数据类型,一切都很好。

Answer 1:

这里要注意的一点是,这种分析器的结果是一个函数 ,该函数变量绑定的环境。 该错误消息基本上GHCI告诉你,它不能打印的功能,大概是因为你忘了传递一个环境

> eval "1 + 1"

当你应该要么通过一个空的环境

> eval "1 + 1" []

或具有一些预先定义的变量

> eval "x + x" [("x", 1)]


文章来源: No instance for (Show ([(String, Int)] -> Int))