module Main where

import Prelude
import Control.Monad.Eff.Console (log)

collatz = \x -> case x of
  y | y `mod` 2.0 == 0.0 -> y / 2.0
  y -> y * 3.0 + 1.0

-- Guards have access to current scope
collatz2 = \x y -> case x of
  z | y > 0.0 -> z / 2.0
  z -> z * 3.0 + 1.0

min :: forall a. Ord a => a -> a -> a
min n m | n < m     = n
        | otherwise = m

max :: forall a. Ord a => a -> a -> a
max n m = case unit of
  _ | m < n     -> n
    | otherwise -> m

testIndentation :: Number -> Number -> Number
testIndentation x y | x > 0.0
  = x + y
                    | otherwise
  = y - x

-- pattern guard example with two clauses
clunky1 :: Int -> Int -> Int
clunky1 a b | x <- max a b
            , x > 5
            = x
clunky1 a _ = a

clunky2 :: Int -> Int -> Int
clunky2 a b | x <- max a b
            , x > 5
            = x
            | otherwise
            = a + b

-- pattern guards on case epxressions
clunky_case1 :: Int -> Int -> Int
clunky_case1 a b =
  case unit of
    unit | x <- max a b
         , x > 5
         -> x
         | otherwise -> a + b

-- test indentation
clunky_case2 :: Int -> Int -> Int
clunky_case2 a b =
  case unit of
    unit
      | x <- max a b
      , x > 5
      -> x
      | otherwise
      -> a + b

main = log $ min "Done" "ZZZZ"
