{-# LANGUAGE TypeFamilies, GADTs, EmptyDataDecls #-}
-----------------------------------------------------------------------------
-- |
-- Module      :  Data.Category.Unit
-- Copyright   :  (c) Sjoerd Visscher 2010
-- License     :  BSD-style (see the file LICENSE)
--
-- Maintainer  :  sjoerd@w3future.com
-- Stability   :  experimental
-- Portability :  non-portable
--
-- /1/, The singleton category with just one object with only its identity arrow.
-----------------------------------------------------------------------------
module Data.Category.Unit where

import Data.Category

data UnitO

-- | The arrows of Unit.
data Unit a b where
  UnitId :: Unit UnitO UnitO

instance Category Unit where
  
  data Obj Unit a where
    UnitO :: Obj Unit UnitO
  
  src UnitId = UnitO
  tgt UnitId = UnitO
  
  id UnitO        = UnitId
  UnitId . UnitId = UnitId