Skip to content
Open
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions src/FSharpPlus/Data/NonEmptyList.fs
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,16 @@ open FSharpPlus.Control


/// A type-safe list that contains at least one element.
[<StructuredFormatDisplay("{StructuredFormatDisplay}")>]
type NonEmptyList<'t> = {Head: 't; Tail: 't list} with
interface IEnumerable<'t> with member x.GetEnumerator () = (let {Head = x; Tail = xs} = x in seq (x::xs)).GetEnumerator ()
interface System.Collections.IEnumerable with member x.GetEnumerator () = (let {Head = x; Tail = xs} = x in seq (x::xs)).GetEnumerator () :> System.Collections.IEnumerator
interface IReadOnlyCollection<'t> with member s.Count = 1 + List.length s.Tail
interface IReadOnlyList<'t> with member s.Item with get index = s.Item index
interface NonEmptySeq<'t> with member s.First = s.Head

member private this.StructuredFormatDisplay = "nelist {" + (sprintf "%A" (this.Head::this.Tail)).[1..^1] + "}"

[<System.Obsolete("Use Head instead.")>]
member this.head = let {Head = a; Tail = _} = this in a

Expand Down