gpt4 book ai didi

haskell - ExceptT 死代码检测

转载 作者:行者123 更新时间:2023-12-02 08:12:34 26 4
gpt4 key购买 nike

ExceptT Monad 转换器堆栈中,throwE 之后的绑定(bind)表达式将不会被执行。

  1. 这是真的吗?
  2. 如果是这样,我如何配置编译器或我的工具来检测像这个例子一样的死代码?
{-# LANGUAGE
GeneralizedNewtypeDeriving
#-}

import Control.Monad.Except (MonadError (..), MonadIO, liftIO)
import Control.Monad.Trans.Except (ExceptT, runExceptT, throwE)

newtype MyTrans e a = MyTrans { unMyTrans :: ExceptT e IO a }
deriving (Functor, Applicative, Monad, MonadIO, MonadError e)

throwMT :: e -> MyTrans e a
throwMT = MyTrans . throwE

runMyTrans :: MyTrans e a -> IO (Either e a)
runMyTrans = runExceptT . unMyTrans

comp = do
liftIO $ putStrLn "Starting Computation"
throwMT "Some Error"
-- dead code from this line
liftIO $ putStrLn "Ending Computation"
return ()


main = print =<< runMyTrans comp

最佳答案

  1. 这是真的。
  2. 据我所知,目前没有可用于 Haskell 的死代码消除工具。

关于haskell - ExceptT 死代码检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45116544/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com