--- Some generic helper definitions.
module Logic.Extra;

import Stdlib.Prelude open;

--- Concatenates a list of strings
--- ;concat (("a" :: nil) :: "b" :: nil); evaluates to ;"a" :: "b" :: nil;
concat (list : List String) : String := foldl (++str) "" list;

--- It inserts the first ;String; at the beginning, in between, and at the end of the second list
surround (x : String) (xs : List String) : List String :=
  (x :: intersperse x xs) ++ x :: nil;

--- It inserts the first ;String; in between the ;String;s in the second list and concatenates the result
intercalate (sep : String) (xs : List String) : String :=
  concat (intersperse sep xs);