你好,我刚开始学习Haskell从书Haskell编程从第一原则。这是从电话练习。请解释maybe [] id
的用法。
reverset :: Phone -> Char ->[(Digit, Presses)]
reverset (Phone buttons) c =
maybe [] id $ find nonEmpty $ map (flip tapsOnButton c) buttons
where
nonEmpty [] = False
nonEmpty _ = True
是空名单吗?
2条答案
按热度按时间tyu7yeag1#
首先,我们来看一下
maybe
函数:如果
maybe
被应用两次,首先传递空列表([]
),然后传递id
函数,则会产生maybe [] id
函数:当给定
Maybe [a]
值时,maybe [] id
生成什么取决于使用哪个数据构造函数(Just
或Nothing
)生成此Maybe [a]
值:Just
,给予此数据构造函数所取的值,即list。Nothing
,则生成空列表([]
)。换句话说,
maybe [] id
等效于以下函数extractList
:粗略地说,它从可能失踪的语境中“提取”了一份清单;在这种情况下,如果缺少,则返回空列表。例如:
注意,对于输入
Just []
和Nothing
,它产生相同的结果。w6lpcovy2#
引用自文件
maybe函数接受默认值、函数和Maybe值。如果Maybe值为Nothing,则函数返回默认值。否则,它将函数应用于Just中的值并返回结果。