packages feed

dzen-dhall-1.0.0: dhall/utils/intersperse.dhall

{- The intersperse function takes an element and a list and `intersperses' that element between the elements of the list. For example,

```
intersperse Natural 0 [ 1, 2, 3, 4 ] = [ 1, 0, 2, 0, 3, 0, 4 ]
```
-}
let List/null = ../prelude/List/null

let List/intersperse
	: ∀(e : Type) → e → List e → List e
	=   λ(e : Type)
	  → λ(separator : e)
	  → λ(list : List e)
	  → let cons =
				λ(element : e)
			  → λ(continue : List e → List e)
			  → λ(step : List e)
			  → continue
				(       if List/null e step

				  then  [ element ]

				  else  step # [ separator, element ]
				)

		let nil = λ(x : List e) → x

		in  List/fold e list (List e → List e) cons nil ([] : List e)

in  List/intersperse