在ghci中设置选项

w12*_*220 4 haskell

我试图在这里使用字符串插值,例如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)

pha*_*dej 6

在各个模块中启用的语言功能不会传播到ghci会话。您必须重新启用它们,即do :set -XQuasiQuotes


顺便说一句,您应该使用以下命令启用语言功能

{-# LANGUAGE QuasiQuotes #-}
Run Code Online (Sandbox Code Playgroud)

Haskell源文件中的语法。