类型检查和 Haskell 提示解释器库



我怎样才能得到这个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实例获取。由于镜头表达式既可以返回值也可以返回普通的 Haskell 类型,我很困惑。

要回答直接的问题,请将???替换为同时是TypeableToJSON实例的任何类型。例如,代码将键入检查您是否使用String

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

最新更新