---------------------------------------------------------------------------- -- | -- Module : Data.Functor.Constrained.Instances -- Copyright : (c) Sergey Vinokurov 2019 -- License : BSD-2 (see LICENSE) -- Maintainer : sergey@debian ---------------------------------------------------------------------------- {-# LANGUAGE ConstraintKinds #-} {-# LANGUAGE TypeFamilies #-} {-# OPTIONS_GHC -Wno-orphans #-} module Data.Functor.Constrained.Instances () where import qualified Data.Array as A import qualified Data.Array.IArray as AIA import qualified Data.Array.Unboxed as AU import Data.IntMap (IntMap) import Data.Map (Map) import Data.Set (Set) import qualified Data.Set as S import qualified Data.Vector as V import qualified Data.Vector.Primitive as VP import qualified Data.Vector.Storable as VS import qualified Data.Vector.Unboxed as VU import Data.Functor.Constrained import Data.Constrained.Instances () instance CFunctor (A.Array i) instance AU.Ix i => CFunctor (AU.UArray i) where {-# INLINE cmap #-} cmap = AIA.amap instance CFunctor IntMap where {-# INLINE cmap_ #-} cmap_ = (<$) instance CFunctor (Map k) where {-# INLINE cmap_ #-} cmap_ = (<$) instance CFunctor Set where {-# INLINE cmap #-} {-# INLINE cmap_ #-} cmap = S.map cmap_ = const . S.singleton instance CFunctor V.Vector where {-# INLINE cmap_ #-} cmap_ = (<$) instance CFunctor VP.Vector where {-# INLINE cmap #-} {-# INLINE cmap_ #-} cmap = VP.map cmap_ x v = VP.replicate (VP.length v) x instance CFunctor VS.Vector where {-# INLINE cmap #-} {-# INLINE cmap_ #-} cmap = VS.map cmap_ x v = VS.replicate (VS.length v) x instance CFunctor VU.Vector where {-# INLINE cmap #-} {-# INLINE cmap_ #-} cmap = VU.map cmap_ x v = VU.replicate (VU.length v) x