0 people like it.
    Like the snippet!
  
  List.groupWhile function
  This snippet declares a function that operates on lists that groups elements of a sequence while the predicate holds. A new group is started for an element when the predicate no longer holds. The predicate is passed the current element and the previous element. This implementation is likely not very efficient.
  |  1: 
 2: 
 3: 
 4: 
 5: 
 6: 
 7: 
 8: 
 9: 
10: 
 | module List =
    let groupWhile<'a> (predicate : 'a -> 'a -> bool) =
        List.scan (fun state item ->
            let prevHead = state |> List.tryHead |> Option.bind List.tryHead
            if prevHead |> Option.map (predicate item) |> Option.defaultValue false
            then (item :: List.head state) :: (List.tail state)
            else [item] :: state) []
        >> List.last
        >> List.map List.rev
        >> List.rev
 | 
Multiple items
module List
from Microsoft.FSharp.Collections
--------------------
type List<'T> =
  | ( [] )
  | ( :: ) of Head: 'T * Tail: 'T list
  interface IEnumerable
  interface IEnumerable<'T>
  member GetSlice : startIndex:int option * endIndex:int option -> 'T list
  member Head : 'T
  member IsEmpty : bool
  member Item : index:int -> 'T with get
  member Length : int
  member Tail : 'T list
  static member Cons : head:'T * tail:'T list -> 'T list
  static member Empty : 'T list
Full name: Microsoft.FSharp.Collections.List<_>
val groupWhile : predicate:('a -> 'a -> bool) -> ('a list -> 'a list list)
Full name: Script.List.groupWhile
val predicate : ('a -> 'a -> bool)
type bool = System.Boolean
Full name: Microsoft.FSharp.Core.bool
val scan : folder:('State -> 'T -> 'State) -> state:'State -> list:'T list -> 'State list
Full name: Microsoft.FSharp.Collections.List.scan
val state : 'a list list
val item : 'a
val prevHead : 'a option
val tryHead : list:'T list -> 'T option
Full name: Microsoft.FSharp.Collections.List.tryHead
module Option
from Microsoft.FSharp.Core
val bind : binder:('T -> 'U option) -> option:'T option -> 'U option
Full name: Microsoft.FSharp.Core.Option.bind
val map : mapping:('T -> 'U) -> option:'T option -> 'U option
Full name: Microsoft.FSharp.Core.Option.map
val head : list:'T list -> 'T
Full name: Microsoft.FSharp.Collections.List.head
val tail : list:'T list -> 'T list
Full name: Microsoft.FSharp.Collections.List.tail
val last : list:'T list -> 'T
Full name: Microsoft.FSharp.Collections.List.last
val map : mapping:('T -> 'U) -> list:'T list -> 'U list
Full name: Microsoft.FSharp.Collections.List.map
val rev : list:'T list -> 'T list
Full name: Microsoft.FSharp.Collections.List.rev
  
  
  More information