NonEmpty
Data.List.NonEmpty
code:hs
data NonEmpty a = a :| a
https://eh-career.com/engineerhub/entry/2017/10/03/110000#課題2-NonEmptyを使ってもっとバグが入りにくい実装を目指す
code:hs
safeHead :: NonEmpty a -> a
safeHead (x :| xs) = x
こうやって見ると意味がわかる
先頭要素 :| 普通のリストなので、
先頭要素 :| []か先頭要素 :| [1,2,3,..]のいずれかにしかならない
だからこれで、「絶対に1要素以上はあるリスト」を表現できる
Purs
テストを見れば雰囲気がわかる
https://github.com/purescript/purescript-lists/blob/v6.0.1/test/Test/Data/List/NonEmpty.purs
https://pursuit.purescript.org/packages/purescript-lists/6.0.1/docs/Data.List.NonEmpty
ts
code:ts
type NonEmptyList<T> = [T, ...T[]];
https://zenn.dev/chot/articles/321f58dfa01339
code:ts
type NonEmptyArray<T> = [T, ...T[]] | [...T[], T]