是否有更短/更清晰的方式来编写以下代码片段:
fromMaybe "" $ fmap (^. fullName) (bi ^. bookerContact)
此处bi ^. bookerContact
可能会生成Maybe Contact
条记录,这就是^. fullName
需要fmap的原因。在嵌套遍历之后,如果我们最终得到Nothing
,我们会使用fromMaybe ""
将其默认为空字符串。
答案 0 :(得分:5)
一种简单的整理方法是使用END
代替$ awk 'NR==FNR{a[$1]=$0;next}{print $0;delete a[$1]}END{for(i in a) print a[i]}' old new
Name Size Date
==================
A 24mb 2/10
C 30mb 2/10
B 10mb 1/10
/ maybe
组合:
fromMaybe
您还可以引入fmap
棱镜来表达所有钻孔作为单个光学元件:
maybe "" (^. fullName) (bi ^. bookerContact)
请注意,我们已从_Just
切换为fromMaybe "" (bi ^? bookerContact . _Just . fullName)
。这反映了如何将(^.)
添加到链中,将以前的镜头(并准确到达一个目标)更改为遍历(可能无法达到目标)。
也可以利用(^?)
作为幺半群,并使用_Just
中的Text
...
fold
...或foldOf
,如果您更喜欢镜头拼写:
Data.Foldable
正如文档所指出的那样,fold (bi ^? bookerContact . _Just . fullName)
相当于foldOf (bookerContact . _Just . fullName) bi
(即foldOf
专门用于(^.)
),所以这也可以通过折叠{{1}来实现}}:
view