Haskell中如何合并两个NonEmpty类型对象?
合并两个NonEmpty类型对象的方法
你遇到的问题是因为(++)操作符仅针对Haskell的普通列表[]定义,而NonEmpty a是独立的新类型(构造为a :| [a]),所以无法直接用++合并。
要合并两个NonEmpty a对象,有两种常用方式:
1. 使用<>操作符(Semigroup实例)
NonEmpty类型实现了Semigroup类型类,因此可以直接用<>操作符完成合并,这是最简洁的方式:
import Data.List.NonEmpty let x = 1 :| [] let y = 2 :| [] x <> y -- 结果为 1 :| [2]
2. 使用append函数
如果你更倾向于显式函数调用,Data.List.NonEmpty模块提供了append函数,功能和<>完全一致:
append x y -- 同样得到 1 :| [2]
另外补充:如果需要将NonEmpty和普通列表合并,模块里也提供了(++|)(NonEmpty在前,列表在后)和(<|++)(列表在前,NonEmpty在后)这类专用操作符,比如x ++| [3,4]会得到1 :| [2,3,4]。
内容的提问来源于stack exchange,提问作者Capybara
相关产品推荐
相关产品推荐

