1
タイプをShowableにするには?タイプを表示可能にします。
type InterpreterMonad = StateT (Env, Env) (ErrorT String IO)()
通常、私はderiving Show
を入力しますが、私はtype
ないnewtype
やdata
を持っています。
P.S.上記の書き込み方法はnewtype
?
タイプをShowableにするには?タイプを表示可能にします。
type InterpreterMonad = StateT (Env, Env) (ErrorT String IO)()
通常、私はderiving Show
を入力しますが、私はtype
ないnewtype
やdata
を持っています。
P.S.上記の書き込み方法はnewtype
?
type
は、タイプシノニムを作成します。インスタンスを作成する場合は、タイプ同義語のターゲット(この場合はStateT (Env, Env) (ErrorT String IO)()
)に対してインスタンスを作成する必要があります。ただし、StateT
タイプのインスタンスはShow
を派生させることができません。StateT
は関数タイプのラッパーであり、GHCは関数タイプのためにShow
を派生することができないためです。
次のようにのnewtypeを書くことができます:
newtype InterpreterMonad = MkInterpreterMonad (StateT (Env, Env) (ErrorT String IO)())
をしかしInterpreterMonad
は今関数型のラッパーのラッパーであるので、これは、あなたがいずれかのShow
を導出することはできません。
タイプ・クラスのインスタンスに対する型同義語の影響はどのようなものでしょうか? GHCのTypeSynonymInstancesプラグマは何をしますか?](http://stackoverflow.com/questions/2125674/what-is-the-effect-of-type-synonyms-on-instances-of-type-classes-what-does -the) – jberryman
'StateT'を見ると基本的には関数なので、関数を表示可能にする問題があります。例えば、' id :: a - > a'とすると、 'show id' print? – Carsten