gpt4 book ai didi

haskell - 使用 `handle` 产生的不明确的类型变量

转载 作者:行者123 更新时间:2023-12-04 23:59:38 25 4
gpt4 key购买 nike

在这段代码中:

import System.Posix.Files
import Control.Exception

safeStat :: FilePath -> IO (Maybe FileStatus)
safeStat path =
handle (\_ -> return Nothing) (getFileStatus path >>= (return . Just))

我收到此错误(在 ghci 中):
Ambiguous type variable `e0' in the constraint:
(Exception e0) arising from a use of `handle'
...

我可以通过执行以下操作来消除错误:
nothing :: IOException -> Maybe a
nothing _ = Nothing

safeStat :: FilePath -> IO (Maybe FileStatus)
safeStat path =
handle (return . nothing) (getFileStatus path >>= (return . Just))

这是怎么回事???我希望处理程序处理任何异常。

最佳答案

Ambiguous type variable意味着编译器不能推断类型。因为它可以是许多具有 Exception 实例的数据类型类型类。您可以使用 SomeException用于处理任何异常。例如:

safeStat :: FilePath -> IO (Maybe FileStatus)
safeStat path = handle errorHandler $ fmap Just $ getFileStatus path
where
errorHandler :: SomeException -> IO (Maybe FileStatus)
errorHandler _ = return Nothing

关于haskell - 使用 `handle` 产生的不明确的类型变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12030977/

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