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