# Functions

## concat_all

</>
``pub fn concat_all(m: Semigroup(a), empty: a) -> fn(List(a)) -> a``

## constant

</>
``pub fn constant(it: a) -> Semigroup(a)``

## first

</>
``pub fn first() -> Semigroup(a)``

## intercalate

</>
``pub fn intercalate(middle: a) -> fn(Semigroup(a)) -> Semigroup(a)``

## last

</>
``pub fn last() -> Semigroup(a)``

## max

</>
``pub fn max(o: Ord(a)) -> Semigroup(a)``

## min

</>
``pub fn min(o: Ord(a)) -> Semigroup(a)``

## reverse

</>
``pub fn reverse(s: Semigroup(a)) -> Semigroup(a)``

## struct1

</>
``````pub fn struct1(defunc: Defunc1(a, b), semigroup1: Semigroup(a)) -> Semigroup(
b,
)``````

## struct2

</>
``````pub fn struct2(defunc: Defunc2(a, b, c), semigroup1: Semigroup(a), semigroup2: Semigroup(
b,
)) -> Semigroup(c)``````

## struct3

</>
``````pub fn struct3(defunc: Defunc3(a, b, c, d), semigroup1: Semigroup(
a,
), semigroup2: Semigroup(b), semigroup3: Semigroup(c)) -> Semigroup(
d,
)``````

## tuple1

</>
``pub fn tuple1(semigroup1: Semigroup(a)) -> Semigroup(#(a))``

## tuple2

</>
``````pub fn tuple2(semigroup1: Semigroup(a), semigroup2: Semigroup(b)) -> Semigroup(
#(a, b),
)``````

## tuple3

</>
``````pub fn tuple3(semigroup1: Semigroup(a), semigroup2: Semigroup(b), semigroup3: Semigroup(
c,
)) -> Semigroup(#(a, b, c))``````