{-# LANGUAGE DataKinds #-}
{-# LANGUAGE PolyKinds #-}
module Control.Category.Indiscrete where

import Prelude hiding (id, (.))
import Control.Category
import Data.Kind (Type)

type Indiscrete :: k -> k -> Type
data Indiscrete (a :: k) (b :: k) = Indiscrete
    deriving (Int -> Indiscrete a b -> ShowS
[Indiscrete a b] -> ShowS
Indiscrete a b -> String
(Int -> Indiscrete a b -> ShowS)
-> (Indiscrete a b -> String)
-> ([Indiscrete a b] -> ShowS)
-> Show (Indiscrete a b)
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
forall k (a :: k) (b :: k). Int -> Indiscrete a b -> ShowS
forall k (a :: k) (b :: k). [Indiscrete a b] -> ShowS
forall k (a :: k) (b :: k). Indiscrete a b -> String
$cshowsPrec :: forall k (a :: k) (b :: k). Int -> Indiscrete a b -> ShowS
showsPrec :: Int -> Indiscrete a b -> ShowS
$cshow :: forall k (a :: k) (b :: k). Indiscrete a b -> String
show :: Indiscrete a b -> String
$cshowList :: forall k (a :: k) (b :: k). [Indiscrete a b] -> ShowS
showList :: [Indiscrete a b] -> ShowS
Show, Indiscrete a b -> Indiscrete a b -> Bool
(Indiscrete a b -> Indiscrete a b -> Bool)
-> (Indiscrete a b -> Indiscrete a b -> Bool)
-> Eq (Indiscrete a b)
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
forall k (a :: k) (b :: k).
Indiscrete a b -> Indiscrete a b -> Bool
$c== :: forall k (a :: k) (b :: k).
Indiscrete a b -> Indiscrete a b -> Bool
== :: Indiscrete a b -> Indiscrete a b -> Bool
$c/= :: forall k (a :: k) (b :: k).
Indiscrete a b -> Indiscrete a b -> Bool
/= :: Indiscrete a b -> Indiscrete a b -> Bool
Eq)

instance Category Indiscrete where
    id :: forall (a :: k). Indiscrete a a
id = Indiscrete a a
forall k (a :: k) (b :: k). Indiscrete a b
Indiscrete
    Indiscrete b c
_ . :: forall (b :: k) (c :: k) (a :: k).
Indiscrete b c -> Indiscrete a b -> Indiscrete a c
. Indiscrete a b
_ = Indiscrete a c
forall k (a :: k) (b :: k). Indiscrete a b
Indiscrete