## Comments

    -- Single line comment
    {- Multi-line
    comment -}

## Strings and characters

    'a'
    '\n'
    '\^A'
    '\^]'
    '\NUL'
    '\23'
    '\o75'
    '\xFE'
    "Here is a backslant \\ as well as \137, \
        \a numeric escape character, and \^X, a control character."

## Numbers

    42
    123.456
    123.456e-789
    1e+3
    0o74
    0XAF

## Full example

    module Codewars.Kata.SumFracts (sumFracts) where

    import Prelude

    import Data.Foldable (foldl)
    import Data.BigInt (BigInt, fromInt, toString)
    import Data.List (List, length)
    import Data.Tuple (Tuple(..))
    import Data.Maybe (Maybe(..))
    import Data.Ord (abs, signum)

    reduce :: Tuple BigInt BigInt -> Tuple BigInt BigInt
    reduce (Tuple num den) =
      let gcd' = gcd num den
          den' = den / gcd'
       in Tuple (num / gcd' * (signum den')) (abs den')

    sumFracts :: List (Tuple Int Int) -> Maybe String
    sumFracts fracts =
      let fracts' = fracts <#> (\(Tuple n d) -> Tuple (fromInt n) (fromInt d)) >>> reduce

          den = foldl (\acc (Tuple _ d) -> lcm acc d) one fracts'
          num = foldl (\acc (Tuple n d) -> acc + n * (den / d)) zero fracts'

          Tuple n d = reduce $ Tuple num den

       in if length fracts == 0
            then Nothing
            else if d == one
                    then Just $ toString n
                    else Just $ (toString n) >< " " >< (toString d)