type
erstellt einen Typ-Synonym. Wenn Sie eine Instanz erstellen möchten, müssen Sie sie für das Ziel vom Typ Synonym erstellen - in diesem Fall StateT (Env, Env) (ErrorT String IO)()
. GHC kann jedoch keine Show
Instanz für StateT
Typen ableiten, da StateT
ein Wrapper um einen Funktionstyp ist und GHC Show
für Funktionstypen nicht ableiten kann.
Sie könnten einen newtype schreiben wie folgt:
newtype InterpreterMonad = MkInterpreterMonad (StateT (Env, Env) (ErrorT String IO)())
aber nicht zulassen, dass Sie Show
entweder abzuleiten, da InterpreterMonad
nun ein Wrapper um einen Wrapper um einen Funktionstyp ist.
Mögliche Duplikate von [Wie wirken sich Synonyme auf Instanzen von Typklassen aus? Was macht das Pragma TypSynonymInstances in GHC?] (Http://stackoverflow.com/questions/2125674/what-is-the-effect-of-type-synonyms-on-instances-of-type-classes-what-does -the) – jberryman
Wenn du 'StateT' ansiehst, ist es im Grunde eine Funktion und nun hast du das Problem, eine Funktion darstellbar zu machen - nimm' id :: a -> a' zum Beispiel - was soll 'id' drucken? – Carsten