问题:
我希望能够在运行时解释任何类型的Haskell代码,包括不仅限于单行代码。
目前我正在使用 hint 来处理单行代码,如下所示:
html :: String -> IO String
html code = do
r <- runInterpreter $ do
setImports ["Prelude"]
interpret code (as :: () -> String)
case r of
Left err -> return $ show err
Right func -> return $ func()
例子:
如果上面的代码是\() -> "Hello World"
,那么它可以正常工作。
但是如果代码是下面这样的,我的上面的代码不能正常工作:(更新: 现在可以正常工作)。
\() -> let concatString :: String -> String -> String
concatString str1 str2 = str1 ++ str2
in concatString "Hello" "World"
问题:
如何使用hint或其他库在运行时解释多行Haskell字符串?
更新
这是可行的 - 我在原始表达式中犯了一个错误(现已更正)。
let
。let
:表达式 ::where
:定义。你甚至可以在你用let
做的定义后面加上一个where
子句(我想)。 - luqui