![](/img/trans.png)
[英]Best practices with monad transformers : to hide or not to hide 'liftIO'
[英]Using liftIO and monad transformers, why is the type of a bound variable IO List instead of List?
我將EitherT與IO結合使用以進行錯誤處理。 我在IO monad中有一個從數據庫獲取數據的函數,因此它具有IO [Value]的類型。 我使用liftIO將此函數提升到我的EitherT IO monad中,並將該函數的結果綁定到變量。 問題在於,GHC告訴我該變量的類型為IO [Value],而不僅僅是[Value]。 我的代碼看起來像這樣
getItem :: (IConnection a) => a -> ItemId -> EitherT String IO Item
getItem conn id = do
result <- liftIO $ do
... database stuf
似乎我誤會了liftIO和綁定變量的工作方式。 我以為liftIO將采用IO [Value]並返回EitherT String IO [Value],並且當綁定到變量時,它將具有[Value]類型。 但似乎我弄錯了。
我知道了我的問題。 我正在對已經是IO值的值調用return,導致返回IO(IO [值])。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.