簡體   English   中英

使用liftIO和monad轉換器,為什么綁定變量IO List的類型是List?

[英]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.

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