packages feed

purescript-0.15.17: tests/purs/passing/DerivingClause.purs

module Main where

import Prelude

import Data.Bifunctor (class Bifunctor, bimap)
import Data.Generic.Rep (class Generic)
import Data.Newtype (class Newtype)
import Data.Foldable (class Foldable, foldMap)
import Data.Traversable (class Traversable)
import Effect (Effect)
import Effect.Console (log)
import Test.Assert

data Color = Red | Green | Blue
  derive (Eq, Ord)

newtype Name = Name String
  derive (Eq, Ord)

data List a = Nil | Cons a (List a)
  derive (Functor, Foldable, Traversable)

data Either2 a b = Left2 a | Right2 b
  derive (Bifunctor)

derive instance Eq a => Eq (Either2 a a)

data Direction = North | South | East | West
  derive (Generic)

newtype Wrapper = Wrapper String
  derive (Newtype)

data Pair a = Pair a a
  derive (Functor)

data Box a = Empty | Full a
  derive (Functor)

derive instance Eq a => Eq (Box a)

main :: Effect Unit
main = do
  assert $ Red == Red
  assert $ Red < Green
  assert $ Name "Alice" == Name "Alice"
  assert $ foldMap show (Cons 1 (Cons 2 Nil)) == "12"
  assert $ bimap (_ + 1) (_ * 2) (Left2 3) == Left2 4
  assert $ map (_ + 1) (Full 1) == Full 2
  assert $ case map (_ + 1) (Pair 1 2) of
    Pair 2 3 -> true
    _ -> false
  log "Done"