2016-04-26 7 views
1

タイプをShowableにするには?タイプを表示可能にします。

type InterpreterMonad = StateT (Env, Env) (ErrorT String IO)() 

通常、私はderiving Showを入力しますが、私はtypeないnewtypedataを持っています。

P.S.上記の書き込み方法はnewtype

+1

タイプ・クラスのインスタンスに対する型同義語の影響はどのようなものでしょうか? GHCのTypeSynonymInstancesプラグマは何をしますか?](http://stackoverflow.com/questions/2125674/what-is-the-effect-of-type-synonyms-on-instances-of-type-classes-what-does -the) – jberryman

+1

'StateT'を見ると基本的には関数なので、関数を表示可能にする問題があります。例えば、' id :: a - > a'とすると、 'show id' print? – Carsten

答えて

4

typeは、タイプシノニムを作成します。インスタンスを作成する場合は、タイプ同義語のターゲット(この場合はStateT (Env, Env) (ErrorT String IO)())に対してインスタンスを作成する必要があります。ただし、StateTタイプのインスタンスはShowを派生させることができません。StateTは関数タイプのラッパーであり、GHCは関数タイプのためにShowを派生することができないためです。

次のようにのnewtypeを書くことができます:

newtype InterpreterMonad = MkInterpreterMonad (StateT (Env, Env) (ErrorT String IO)()) 

をしかしInterpreterMonadは今関数型のラッパーのラッパーであるので、これは、あなたがいずれかのShowを導出することはできません。

関連する問題