我试图在这里使用字符串插值,例如http://hackage.haskell.org/package/interpolate-0.2.0/docs/Data-String-Interpolate.html
特别,
>>> :set -XQuasiQuotes
>>> import Data.String.Interpolate
>>> let name = "Marvin"
>>> putStrLn [i|name: #{name}|]
name: Marvin
Run Code Online (Sandbox Code Playgroud)
如果我在ghci中运行它,效果很好。另外,如果我写一个像这里所示的文件,这也可以工作https://downloads.haskell.org/~ghc/7.6.3/docs/html/users_guide/ch04s02.html
{-# OPTIONS_GHC -XQuasiQuotes #-}
import Data.String.Interpolate
main = do
let name = "Marvin"
putStrLn [i|name: #{name}|]
Run Code Online (Sandbox Code Playgroud)
但是,如果我只是使用选项并导入文件,然后在ghci中运行命令,则会收到错误消息 parse error on input'#'
-- in file example.hs
{-# OPTIONS_GHC -XQuasiQuotes #-}
import Data.String.Interpolate
-- in GHCi, ghci example.hs, then run
> let name = "Marvin"
> putStrLn [i|name: #{name}|]
`parse error on input'#'`
what's happening here and why can't i run the command in ghci?
thanks
Run Code Online (Sandbox Code Playgroud)
在各个模块中启用的语言功能不会传播到ghci
会话。您必须重新启用它们,即do :set -XQuasiQuotes
。
顺便说一句,您应该使用以下命令启用语言功能
{-# LANGUAGE QuasiQuotes #-}
Run Code Online (Sandbox Code Playgroud)
Haskell源文件中的语法。