当我关注它时,
print [1..5]
和结果[1,2,3,4,5]
但为什么关注不起作用
let x = "[1..5]"
print x
我想将字符串变量作为haskell命令处理。有人可以帮助我。
答案 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
以上代码将:
hint
包x
,这是您要评估的表达式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)
会做你想做的事。