字符串变量为haskell命令

时间:2013-09-08 02:19:38

标签: haskell

当我关注它时,

print [1..5]

和结果[1,2,3,4,5]

但为什么关注不起作用

let x = "[1..5]"
print x

我想将字符串变量作为haskell命令处理。有人可以帮助我。

3 个答案:

答案 0 :(得分:2)

请注意您的第二个例子:

let x = "[1..5]"
print x

工作得很好,只是说出了与你想要的不同的东西。

如果您希望将某些字符串视为有效的Haskell表达式,那么您需要通过一些Haskell解释器解释该字符串。最常见的解释器是通过ghc-api访问的。 ghc-api的干净包装是hint包。

使用提示的一个简单示例是(via ghci):

import Language.Haskell.Interpreter
let x = "[1..5]"
Right result <- runInterpreter $ setImports ["Prelude"] >> eval x
print result

以上代码将:

  1. hint
  2. 导入解释器模块
  3. 设置一个字符串x,这是您要评估的表达式
  4. 在表达式
  5. 上运行解释器
  6. 打印结果(已经是字符串,因此您可能更喜欢putStrLn result)。

答案 1 :(得分:1)

如果您只想将列表作为字符串获取,请使用show function

let x = show [1..5]
print x

您的第一个答案“有效”,因为函数应用程序是右关联的,因此Haskell会评估[1..5]以生成列表[1,2,3,4,5]并将其传递给print函数。

答案 2 :(得分:0)

看起来您正在寻找System.Eval.Haskell.eval或其中一个变体。在这种情况下,我相信

import System.Eval.Haskell
do x <- eval "[1..5]" [] :: IO (Maybe Int List)
   putStrLn (if isJust x then "" else show $ fromJust x)

会做你想做的事。