{-# LANGUAGE
    TypeOperators
  , TypeFamilies
  , GADTs
  , RankNTypes
  , PatternSynonyms
  , FlexibleContexts
  , FlexibleInstances
  , NoImplicitPrelude
  , UndecidableInstances
  , ScopedTypeVariables
  , ConstraintKinds
  , MultiParamTypeClasses
  #-}
-----------------------------------------------------------------------------
-- |
-- Module      :  Data.Category.Enriched.Poset3
-- License     :  BSD-style (see the file LICENSE)
--
-- Maintainer  :  sjoerd@w3future.com
-- Stability   :  experimental
-- Portability :  non-portable
-----------------------------------------------------------------------------
module Data.Category.Enriched.Poset3 where

import Data.Category.Boolean
import Data.Category.Enriched

data One
data Two
data Three
data PosetTest a b where
  One :: PosetTest One One
  Two :: PosetTest Two Two
  Three :: PosetTest Three Three

type family Poset3 a b where
  Poset3 Two One = Fls
  Poset3 Three One = Fls
  Poset3 Three Two = Fls
  Poset3 a b = Tru
instance ECategory PosetTest where
  type V PosetTest = Boolean
  type PosetTest $ (a, b) = Poset3 a b
  hom :: forall a b.
Obj PosetTest a
-> Obj PosetTest b -> Obj (V PosetTest) (PosetTest $ (a, b))
hom PosetTest a a
One PosetTest b b
One = Boolean Tru Tru
Tru
  hom PosetTest a a
One PosetTest b b
Two = Boolean Tru Tru
Tru
  hom PosetTest a a
One PosetTest b b
Three = Boolean Tru Tru
Tru
  hom PosetTest a a
Two PosetTest b b
One = Boolean Fls Fls
Fls
  hom PosetTest a a
Two PosetTest b b
Two = Boolean Tru Tru
Tru
  hom PosetTest a a
Two PosetTest b b
Three = Boolean Tru Tru
Tru
  hom PosetTest a a
Three PosetTest b b
One = Boolean Fls Fls
Fls
  hom PosetTest a a
Three PosetTest b b
Two = Boolean Fls Fls
Fls
  hom PosetTest a a
Three PosetTest b b
Three = Boolean Tru Tru
Tru

  id :: forall a. Obj PosetTest a -> Arr PosetTest a a
id PosetTest a a
One = Boolean Tru Tru
Tru
  id PosetTest a a
Two = Boolean Tru Tru
Tru
  id PosetTest a a
Three = Boolean Tru Tru
Tru
  comp :: forall a b c.
Obj PosetTest a
-> Obj PosetTest b
-> Obj PosetTest c
-> V PosetTest
     (BinaryProduct
        (V PosetTest) (PosetTest $ (b, c)) (PosetTest $ (a, b)))
     (PosetTest $ (a, c))
comp PosetTest a a
One PosetTest b b
One PosetTest c c
One = Boolean Tru Tru
Tru
  comp PosetTest a a
One PosetTest b b
One PosetTest c c
Two = Boolean Tru Tru
Tru
  comp PosetTest a a
One PosetTest b b
One PosetTest c c
Three = Boolean Tru Tru
Tru
  comp PosetTest a a
One PosetTest b b
Two PosetTest c c
One = Boolean Fls Tru
F2T
  comp PosetTest a a
One PosetTest b b
Two PosetTest c c
Two = Boolean Tru Tru
Tru
  comp PosetTest a a
One PosetTest b b
Two PosetTest c c
Three = Boolean Tru Tru
Tru
  comp PosetTest a a
One PosetTest b b
Three PosetTest c c
One = Boolean Fls Tru
F2T
  comp PosetTest a a
One PosetTest b b
Three PosetTest c c
Two = Boolean Fls Tru
F2T
  comp PosetTest a a
One PosetTest b b
Three PosetTest c c
Three = Boolean Tru Tru
Tru
  comp PosetTest a a
Two PosetTest b b
One PosetTest c c
One = Boolean Fls Fls
Fls
  comp PosetTest a a
Two PosetTest b b
One PosetTest c c
Two = Boolean Fls Tru
F2T
  comp PosetTest a a
Two PosetTest b b
One PosetTest c c
Three = Boolean Fls Tru
F2T
  comp PosetTest a a
Two PosetTest b b
Two PosetTest c c
One = Boolean Fls Fls
Fls
  comp PosetTest a a
Two PosetTest b b
Two PosetTest c c
Two = Boolean Tru Tru
Tru
  comp PosetTest a a
Two PosetTest b b
Two PosetTest c c
Three = Boolean Tru Tru
Tru
  comp PosetTest a a
Two PosetTest b b
Three PosetTest c c
One = Boolean Fls Fls
Fls
  comp PosetTest a a
Two PosetTest b b
Three PosetTest c c
Two = Boolean Fls Tru
F2T
  comp PosetTest a a
Two PosetTest b b
Three PosetTest c c
Three = Boolean Tru Tru
Tru
  comp PosetTest a a
Three PosetTest b b
One PosetTest c c
One = Boolean Fls Fls
Fls
  comp PosetTest a a
Three PosetTest b b
One PosetTest c c
Two = Boolean Fls Fls
Fls
  comp PosetTest a a
Three PosetTest b b
One PosetTest c c
Three = Boolean Fls Tru
F2T
  comp PosetTest a a
Three PosetTest b b
Two PosetTest c c
One = Boolean Fls Fls
Fls
  comp PosetTest a a
Three PosetTest b b
Two PosetTest c c
Two = Boolean Fls Fls
Fls
  comp PosetTest a a
Three PosetTest b b
Two PosetTest c c
Three = Boolean Fls Tru
F2T
  comp PosetTest a a
Three PosetTest b b
Three PosetTest c c
One = Boolean Fls Fls
Fls
  comp PosetTest a a
Three PosetTest b b
Three PosetTest c c
Two = Boolean Fls Fls
Fls
  comp PosetTest a a
Three PosetTest b b
Three PosetTest c c
Three = Boolean Tru Tru
Tru