2012-12-20 5 views
7

私はHaskellが好きですが、Numクラスには不満です。 したがって、私は代数型のための独自の型クラス階層を作りたいと思っています。
PreludeをインポートしてNumとそれに関連するすべてをインポートしても、リテラル1にタイプtを持たせる唯一の方法は、tインスタンスNumを作ることです。
私は自分のfromIntegerクラスを作成し、完全に絵のうち、テンキーを残し、このHaskellのfromIntegerのオーバーライド

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を実装し、決してテンキーについては何も言わなければならないでしょうが大好きです。

パーサーに異なるfromIntegerメソッドを使用するように指示する方法はありますか?

ありがとうございます!

答えて

12

あなたはGHCのRebindableSyntax extensionを探しています。

は、ソースファイルの先頭に

{-# LANGUAGE RebindableSyntax #-} 

を置くことによって、それを有効にします。

+0

素晴らしいですね。 –

+5

@JosephVictor [Numeric Prelude](http://www.haskell.org/haskellwiki/Numeric_Prelude)もご覧ください。あなたはそれがあなたが望むものを見つけるかもしれません。 – dave4420

+1

それはもっとクールです(基本的に、私が書いているのはまさしく!) –