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