【发布时间】:2016-06-23 05:53:46
【问题描述】:
我对 Haskell 很陌生,不知道如何使用 Maybe [a]。通常我正在编写 OOP (VB.NET) 并且在空闲时间我想学习 haskell(不要问为什么;))。
那么,我想做什么?我想读取两个带有数字 ID 的文件,并仅找出两个文件中匹配的 ID。阅读文件并不是什么大事,它工作起来非常简单。现在,我得到了两个Maybe[Ids] 列表(举个简单的例子,认为ID 是Int)。所以我需要的功能是这样的
playWithMaybe :: (Maybe [a]) -> (Maybe [Int]) -> [Int]
现在我想像以前一样访问列表成员
playWithMaybe (x:xs) (y:ys) = undefined
但不幸的是,GHC 表示这两个列表都不允许这样做
Couldn't match expected type ‘Maybe [Int]’ with actual type ‘[t0]’
所以我玩了一下,但没有找到访问列表成员的方法。有人可以帮我吗?稍微解释一下就好了!
【问题讨论】:
-
Maybe [a]不是列表类型,它是Maybe类型,可能(或可能不)包含列表。 — 我不清楚你想做什么。 -
我尝试从 Maybe [a] 中提取列表 [a] 以使用列表 [a] 的元素。
-
就像 list 有两个基本构造函数(
[]和x : xs)一样,Maybe有两个基本构造函数(Nothing和Just x),您可以在它们上进行模式匹配。 -
@sandkasten 如果没有列表,你想发生什么?
-
目前还不是很清楚你为什么拥有 Maybe,以及你打算用
Maybe [a]做什么(你无能为力)。也许需要更多的上下文。