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