packages feed

dhall-1.7.0: Prelude/Text/concatSep

{-
Concatenate a `List` of `Text` values with a separator in between each value

Examples:

```
./concatSep ", " ["ABC", "DEF", "GHI"] = "ABC, DEF, GHI"

./concatSep ", " ([] : List Text) = ""
```
-}
    let concatSep
        : ∀(separator : Text) → ∀(elements : List Text) → Text
        =   λ(separator : Text)
          → λ(elements : List Text)
          →     let status =
                      List/fold
                      Text
                      elements
                      < Empty : {} | NonEmpty : Text >
                      (   λ(element : Text)
                        → λ(status : < Empty : {} | NonEmpty : Text >)
                        → merge
                          { Empty    =
                              λ(_ : {}) → < NonEmpty = element | Empty : {} >
                          , NonEmpty =
                                λ(result : Text)
                              → < NonEmpty = element ++ separator ++ result
                                | Empty    : {}
                                >
                          }
                          status
                          : < Empty : {} | NonEmpty : Text >
                      )
                      < Empty = {=} | NonEmpty : Text >
            
            in  merge
                { Empty = λ(_ : {}) → "", NonEmpty = λ(result : Text) → result }
                status
                : Text

in  concatSep