如果我们查看The random package的来源,我们就会有一个文件Random.hs
。由于CPP扩展,必须通过以下命令调用ghci:
ghci -cpp Random.hs
或者可以做:
ghci -cpp
然后从ghci:
Prelude GOA> :load Random
[1 of 1] Compiling System.Random ( Random.hs, interpreted )
Ok, modules loaded: System.Random.
如果我使用Emacs Inferior Haskell模式(Emacs/Inferior Haskell processes)而且我有 来源:
module Main where
import System.Random
gen = (random (mkStdGen 0)) :: (Bool,StdGen)
mymult :: Int -> Int
mymult x = 2 * x
main = do
print $ mymult 5
然后输入emacs命令:
C-c C-l
是inferior-haskell-load-file
,ghci在emacs的子窗口中打开。但是,如果在此窗口中输入load Random.hs
,则会收到错误消息:
*Main GOA> :load Random.hs
Random.hs:1:2: lexical error at character 'i'
Failed, modules loaded: none.
如何考虑cpp扩展程序加载Random.hs
?或者,如何修改haskell-mode/inf-haskell.el,以便在键入-cpp
时使用C-c C-l
选项调用ghci,以便可以无误地执行命令:load Random.hs
?
答案 0 :(得分:5)
最可靠的方法当然是在文件标题中请求CPP
以及其他扩展名:
{-# LANGUAGE CPP #-}
#if __GLASGOW_HASKELL__ >= 701
{-# LANGUAGE Trustworthy #-}
#endif
-----------------------------------------------------------------------------
-- |
-- Module : System.Random
-- Copyright : (c) The University of Glasgow 2001
-- License : BSD-style (see the file LICENSE in the 'random' repository)
random
包仅在.cabal
文件中执行此操作。
最简单的方法可能只是在所有ghci会话中永久启用CCP
,方法是添加
:set -XCPP
到您的~/.ghci
文件。