1
如何使類型顯示?使類型可顯示。
type InterpreterMonad = StateT (Env, Env) (ErrorT String IO)()
通常情況下,我會鍵入deriving Show
但我有一個type
不newtype
或data
。
P.S.如何用newtype
寫上面?
如何使類型顯示?使類型可顯示。
type InterpreterMonad = StateT (Env, Env) (ErrorT String IO)()
通常情況下,我會鍵入deriving Show
但我有一個type
不newtype
或data
。
P.S.如何用newtype
寫上面?
type
創建一個類型的同義詞。如果要創建實例,則必須爲類型同義詞的目標創建它 - 在此例中爲StateT (Env, Env) (ErrorT String IO)()
。但是,GHC無法爲StateT
類型推導出Show
實例,因爲StateT
是函數類型的包裝,而GHC無法爲函數類型推導Show
。
newtype InterpreterMonad = MkInterpreterMonad (StateT (Env, Env) (ErrorT String IO)())
但這不會讓你得到Show
,因爲相關InterpreterMonad
現在大約是圍繞一個函數類型的包裝的包裝:
如下你可以寫一個NEWTYPE。
[類型同類對類型實例有什麼影響? 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'? – Carsten