【问题标题】:Type checking and the Haskell hint interpreter library类型检查和 Haskell 提示解释器库
【发布时间】:2014-05-18 02:46:02
【问题描述】:

如何让这个 Haskell 代码进行类型检查?

aesonLensInterpreter :: String -> String -> Interpreter (Maybe Value)
aesonLensInterpreter input expr = do
      setImportsQ [("Prelude", Nothing), ("Data.Map", Just "M"), ("Control.Lens", Nothing), ("Data.Aeson.Lens", Nothing), ("Data.Aeson", Nothing)]
      set [languageExtensions := [OverloadedStrings]]

      let interpExpr = "(" ++ (show input) ++ " :: String)" ++ expr
      v <- interpret interpExpr (as :: ???)
      return $ Just (toJSON v)

基本上,我希望用户输入任何可能的 Lens 表达式并将结果作为 ToJSON 实例。由于 Lens 表达式既可以返回 Values 也可以返回普通的 Haskell 类型,我很困惑。

【问题讨论】:

  • 您能添加一些具体的示例输入吗?此外,代码格式被破坏。

标签: haskell types hint


【解决方案1】:

要回答直接问题,请替换 ???可以是TypeableToJSON 的实例的任何类型。例如,如果您使用String,代码将进行类型检查。

关于您的目标,如果您要解释的表达式实际上可以具有不同的类型,那么这种方法似乎无法直接工作。由于您已经在解释,我建议在解释器中进行 JSON 转换。类似于在 interpExpr 前面加上 toJSON $ 并替换 ??? Value.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多