[英]Haskell home-made monad transformer unable to Show itself in GHCi
我正在使用簡單的Monad變壓器,如http://www.cs.nott.ac.uk/~nhn/MGS2006/LectureNotes/lecture03-9up.pdf中所述
我的錯誤處理變壓器具有類型
newtype ET m a = ET (m (Maybe a))
我已經實現了所有必要的管道,並且可以將其與標識monad(在我的小沙箱中稱為I
)耦合,並編寫/編譯非平凡的函數。
但是我無法在屏幕上打印任何結果值。 消息是:
No instance for (Show (ET I Value)) arising from a use of ‘print’
Maybe
是進口的。 I
和Value
都可以毫無問題地獨立Show
和顯示。 不會顯示與ET
的混合。 我看到兩種方式:
ET ma
的聲明中插入deriving Show
(我嘗試通過多種方式來獲得許多不同的錯誤消息) 如何在REPL中顯示我看重的ET I Value
?
獨立派生的目的之一是,即使實際代碼仍是通過機械方式派生的,有時編譯器也無法推斷出生成特定實例所需的約束。 因此,您只需要知道賦予它什么約束即可:
{-# LANGUAGE StandaloneDeriving, UndecidableInstances #-}
newtype ET m a = ET (m (Maybe a))
deriving instance Show (m (Maybe a)) => Show (ET m a)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.