1{-# LANGUAGE CPP #-}
2#if __GLASGOW_HASKELL__ >= 706
3{-# LANGUAGE PolyKinds #-}
4#endif
5{-# LANGUAGE FlexibleContexts #-}
6{-# LANGUAGE FlexibleInstances #-}
7{-# LANGUAGE MultiParamTypeClasses #-}
8-----------------------------------------------------------------------------
9-- |
10-- Copyright   :  (C) 2011-2015 Edward Kmett
11-- License     :  BSD-style (see the file LICENSE)
12--
13-- Maintainer  :  Edward Kmett <ekmett@gmail.com>
14-- Stability   :  experimental
15-- Portability :  non-portable (flexible MPTCs)
16--
17----------------------------------------------------------------------------
18module Data.Semigroupoid.Ob where
19
20import Data.Semigroupoid
21import Data.Functor.Bind
22import Control.Arrow
23
24
25#ifdef MIN_VERSION_comonad
26import Data.Functor.Extend
27import Control.Comonad
28#endif
29
30class Semigroupoid k => Ob k a where
31  semiid :: k a a
32
33instance (Bind m, Monad m) => Ob (Kleisli m) a where
34  semiid = Kleisli return
35
36#ifdef MIN_VERSION_comonad
37instance (Extend w, Comonad w) => Ob (Cokleisli w) a where
38  semiid = Cokleisli extract
39#endif
40
41instance Ob (->) a where
42  semiid = id
43