如何创建非空列表?

时间:2019-02-18 10:23:12

标签: haskell

我想使用Data.List.NonEmpty,正在搜索如何用一个元素定义列表?我只能用列表对nonEmpty进行罚款,但显然它会返回Maybe,而我不希望这样做...

更新:我找到了这种解决方案

let emptyList = 5 :| []

2 个答案:

答案 0 :(得分:6)

fromList采用任何非空列表值。

> fromList [5]
5 :| []

如果要使用a -> NonEmpty a类型的函数,则

singleton = fromList . (:[])

(我很惊讶singleton尚未包含在包装中。)

(或如评论中提到的@Lee,singleton = pure使用 Applicative的{​​{1}}实例。)

您的NonEmpty解决方案也很好,因为5 :| []是创建新:|值的方法;这些功能只是其使用的包装。 (实际上,NonEmpty定义purepure a = a :| []。)

答案 1 :(得分:3)

扩展为OverloadedLists时,通常的列表语法可用于定义任何IsList实体(例如NonEmpty):

{-# LANGUAGE OverloadedLists #-}

import Data.List.NonEmpty

l :: NonEmpty Int
l = [42]