【发布时间】:2015-09-14 06:51:39
【问题描述】:
我正在尝试像这样在 Haskell 中将 Maybe Int 转换为 Int:
convert :: Maybe Int -> Int
convert mx = case mx of
Just x -> x
Nothing -> error "error message"
当我编译它时,Haskell 告诉我:parse error on input 'Nothing'。
我需要这个,因为我想使用 Data.List 模块中的 elem.Index 函数获取列表中元素的索引,然后在 take 函数上使用这个索引。我的问题是elemIndex 返回一个Maybe Int,但take 需要一个Int。
【问题讨论】:
-
我希望你明白,以这种方式“转换”并不是一个聪明的主意:你本质上是在颠覆类型系统。仅当您完全确定参数是
Just,但类型检查器无法证明时才这样做。即便如此,最好在您需要的地方明确匹配case mx of {Just x -> x},而不是通过辅助函数。原因是:如果这个匹配确实失败,它会给你一个很好的清晰的错误信息,告诉你它发生在哪里。当假设失败时,您的convert将始终为您提供相同的错误消息,无论您在哪里使用它。 -
听起来你只需要
takeWhile (/= item)?
标签: haskell pattern-matching type-conversion parse-error maybe