Изменение процессов Emacs Inferior Haskell для включения обработки CPP

Если мы посмотрим на источник случайного пакета, у нас будет файл 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) и у меня есть исходный код :

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.

Как я могу загрузить Random.hs с учетом расширений cpp? Или, альтернативно, как изменить haskell-mode/inf-haskell.el чтобы ghci вызывался с параметром -cpp после ввода C-c C-l, чтобы команда :load Random.hs могла быть выполнена без ошибок?


person artella    schedule 31.05.2014    source источник
comment
Я не получаю ошибку, когда делаю :load Random.hs. И в приведенном вами образце кода я не вижу причин, по которым вам нужно -cpp в качестве опции для ghci. Вызов его без самой опции работает для меня.   -  person Sibi    schedule 31.05.2014
comment
@Sibi Вы имеете в виду, что можете загрузить Random.hs в zip-файл в hackage.haskell.org/package/random без опции cpp?   -  person artella    schedule 31.05.2014


Ответы (1)


Самый надежный способ, безусловно, запросить 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.

Самый простой способ — просто включить CCP на постоянной основе во всех сеансах ghci, добавив

:set -XCPP

в ваш файл ~/.ghci.

person leftaroundabout    schedule 31.05.2014