我想使用Data.List.NonEmpty,正在搜索如何用一个元素定义列表?我只能用列表对nonEmpty进行罚款,但显然它会返回Maybe,而我不希望这样做...
更新:我找到了这种解决方案
let emptyList = 5 :| []
答案 0 :(得分:6)
fromList
采用任何非空列表值。
> fromList [5]
5 :| []
如果要使用a -> NonEmpty a
类型的函数,则
singleton = fromList . (:[])
(我很惊讶singleton
尚未包含在包装中。)
(或如评论中提到的@Lee,singleton = pure
使用
Applicative
的{{1}}实例。)
您的NonEmpty
解决方案也很好,因为5 :| []
是创建新:|
值的方法;这些功能只是其使用的包装。 (实际上,NonEmpty
被定义为pure
和pure a = a :| []
。)
答案 1 :(得分:3)
扩展为OverloadedLists时,通常的列表语法可用于定义任何IsList实体(例如NonEmpty):
{-# LANGUAGE OverloadedLists #-}
import Data.List.NonEmpty
l :: NonEmpty Int
l = [42]