簡體   English   中英

將嵌套類型轉換為monad轉換器堆棧

[英]Converting a nested type into a monad transformer stack

我對Haskell從第一原理編程的Monad變形金剛一章中的一個練習感到有些麻煩。 具體來說,我們給了一個看起來像(const (Right (Just 1))) ,並要求其完成以下操作:

import Control.Monad.Trans.Except
import Control.Monad.Trans.Maybe
import Control.Monad.Trans.Reader

embedded :: MaybeT (ExceptT String (ReaderT () IO)) Int
embedded = ??? (const (Right (Just 1)))

我假設這意味着我們不能更改嵌套結構,盡管說明只是“使之起作用”。

在確定自己被卡住之前,我已經走了幾條路。 到目前為止,據我所知,monad變壓器最常見的是結合了liftdo的-除了SO Q&A, Diehl在這里總結得很好

我也一直在使用transformers庫中的map<Monad>T變體來獲得一些有趣的結果,但是我似乎無法找出解決原始問題的方法。 任何提示將不勝感激-但是,如果您發布解決方案, 請使用擾流器標記 (盡管我從未見過它在除《 Puzzling》之外的其他任何地方使用)。

此練習確實顯示了monad變壓器有時可以“由內而外”工作的方式。 首先弄清楚如何包裝該表達式,以便獲得某種類型的東西

ReaderT () IO (Either String (Maybe Int))

然后弄清楚如何獲得MaybeT 等等。

不要忘記,您被允許使用ReaderTEitherTMaybeT數據構造函數!

如果您還沒有嘗試過,那么這將是一個絕佳的時機來嘗試GHC的打孔

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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