Modifying Emacs Inferior Haskell processes to enable CPP processing

ⅰ亾dé卋堺 提交于 2019-12-24 14:23:58

问题


If we look at the source of The random package we have a file Random.hs. Because of CPP extensions one has to invoke ghci via the following command :

ghci -cpp Random.hs

Alternatively one can do :

ghci -cpp

and then from within ghci :

Prelude GOA> :load Random
[1 of 1] Compiling System.Random    ( Random.hs, interpreted )
Ok, modules loaded: System.Random.

If I use Emacs Inferior Haskell mode (Emacs/Inferior Haskell processes) and I have the source :

module Main where
import System.Random

gen = (random (mkStdGen 0)) :: (Bool,StdGen)

mymult :: Int -> Int
mymult x = 2 * x

main = do
  print $ mymult 5

then upon typing the emacs command :

C-c C-l

which is inferior-haskell-load-file, ghci is opened in a subwindow in emacs. However if from within this window I type load Random.hs then I get the error message :

*Main GOA> :load Random.hs

Random.hs:1:2: lexical error at character 'i'
Failed, modules loaded: none.

How can I load Random.hs taking into account cpp extensions? Or alternatively how do I modify haskell-mode/inf-haskell.el such that ghci is invoked with the -cpp option upon typing C-c C-l, so that the command :load Random.hs can be executed without error?


回答1:


The most reliable way is certainly to request CPP, along with other extensions, in the file header:

{-# 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)

The random package only does this in the .cabal file.

The easiest way might be to simply turn CCP on permanently in all ghci sessions, by adding

:set -XCPP

to your ~/.ghci file.



来源:https://stackoverflow.com/questions/23971415/modifying-emacs-inferior-haskell-processes-to-enable-cpp-processing

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!