簡體   English   中英

Haskell自制Monad變壓器無法在GHCi中展示

[英]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是進口的。 IValue都可以毫無問題地獨立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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM