GHCi 7.8.2不使用文件中的语言扩展名

时间:2014-05-15 01:51:17

标签: haskell ghc

这是一些需要-XRebindableSyntax的简单代码。

{-# LANGUAGE RebindableSyntax, NoImplicitPrelude #-}

import NumericPrelude
import qualified Algebra.Additive (C)
import qualified Algebra.Ring (C)

newtype Foo = Foo Int deriving (Show)

instance Algebra.Additive.C Foo where
    (Foo x) + (Foo y) = Foo (x+y)

instance Algebra.Ring.C Foo where
    fromInteger = Foo . fromInteger

f :: Foo -> Foo -> Foo
f x y = x + y

g = f 3 5

这是我的GHCi成绩单:

> ghci Foo.hs
  GHCi, version 7.8.2
  ...
*Main> g
  Foo 8
*Main> f 3 5

  <interactive>:3:3:
    No instance for (GHC.Num.Num Foo) arising from the literal ‘3’
    In the first argument of ‘f’, namely ‘3’
    In the expression: f 3 5
    In an equation for ‘it’: it = f 3 5

 *Main> :set -XRebindableSyntax
 *Main> f 3 5
   Foo 8

我95%确定当我在GHCi 7.8之前加载扩展名的文件时,我不必在GHCi中重置该扩展名。这是在某处记录的,还是一个bug?有一个简单的解决方法(例如,告诉GHCi总是使用-XRebindableSyntax,我通常需要它吗?)

1 个答案:

答案 0 :(得分:3)

  

是否有简单的解决方法(例如,告诉GHCi始终使用-XRebindableSyntax,我通常需要它?)

您可以将.ghci文件放在与源文件相同的目录中。现在,如果从该目录启动ghci,将加载.ghci文件并执行其内容,就像您在ghci提示符下键入的命令一样。在这种情况下,您可以将:set -XRebindableSyntax放在那里。

我认为这比将:set -XRebindableSyntax放入主目录中的.ghci更好,因为您可能在其他需要不同扩展名的目录中有其他Haskell项目。

有关项目特定ghci文件的更多建议,请参阅Neil Mitchell's blog post