在Haskell中覆盖fromInteger

时间:2012-12-20 18:37:27

标签: haskell numeric typeclass

所以我喜欢Haskell,但我对Num课不满意。 所以我想为代数类型创建自己的类型类层次 问题是,即使我导入Prelude隐藏Num以及与之相关的所有内容,仍然使文字1具有类型t的唯一方法是使t实例为Num。
我很乐意在整个类中创建自己的内容,并将Num完全排除在外,就像这样

import Prelude hiding (everything having to do with Num)
import qualified Prelude (everything having to do with Num)

class (Eq fi) => FromInteger fi where
  fromInteger :: Integral -> fi

foo :: (FromInteger fi) => fi -> String
foo 1 = "that was a one"
foo 0 = "that was a zero"
foo n = "that was neither zero nor one"

然后我会适当地为整个类型实现fromInteger,而不必对Num说任何话。

有没有办法告诉解析器使用不同的fromInteger方法?

谢谢!

1 个答案:

答案 0 :(得分:12)

您正在寻找GHC的RebindableSyntax extension

通过输入

启用它
{-# LANGUAGE RebindableSyntax #-}

位于源文件的顶部。