【发布时间】:2019-11-22 00:37:40
【问题描述】:
我有一个“管理”函数,它检查参数并返回一个可能(字符串):
- 如果没有参数->返回Nothing
- 如果我的参数等于“-h” -> 返回字符串帮助
当我得到一个文件并检查这个文件是否存在时,我的问题就出现了。
无法匹配预期的类型“可能是字符串” 具有实际类型‘IO (Either e0 a2)’
managagment :: [String] -> Maybe (String)
managagment [] = Nothing
managagment ["-h"] = Just (help)
managagment [file] = try $ readFile file >>= \result -> case result of
Left e -> Nothing
Right content -> Just (content)
【问题讨论】:
-
你认为
readFile的类型是什么? -
同理,你认为
try的类型是什么?检查时 ghci 会说什么? -
Ghci return "IO (Either e a)",Either 由 Left 和 Right 两个构造函数组成。我就是这样做的
-
Just "help",而不是Just help。 -
help 是一个返回字符串的函数(help :: String)
标签: haskell try-catch maybe either