constraint-classes (empty) → 0.1.0
raw patch · 5 files changed
+134/−0 lines, 5 filesdep +basesetup-changed
Dependencies added: base
Files
- LICENSE +30/−0
- Setup.hs +2/−0
- constraint-classes.cabal +23/−0
- src/Control/ConstraintClasses.hs +51/−0
- src/Control/ConstraintClasses/Extras.hs +28/−0
+ LICENSE view
@@ -0,0 +1,30 @@+Copyright guaraqe (c) 2016++All rights reserved.++Redistribution and use in source and binary forms, with or without+modification, are permitted provided that the following conditions are met:++ * Redistributions of source code must retain the above copyright+ notice, this list of conditions and the following disclaimer.++ * Redistributions in binary form must reproduce the above+ copyright notice, this list of conditions and the following+ disclaimer in the documentation and/or other materials provided+ with the distribution.++ * Neither the name of guaraqe nor the names of other+ contributors may be used to endorse or promote products derived+ from this software without specific prior written permission.++THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ Setup.hs view
@@ -0,0 +1,2 @@+import Distribution.Simple+main = defaultMain
+ constraint-classes.cabal view
@@ -0,0 +1,23 @@+name: constraint-classes+version: 0.1.0+synopsis: Prelude classes using ConstraintKinds+description: Please see README.org+homepage: http://github.com/guaraqe/constraint-classes#readme+license: BSD3+license-file: LICENSE+author: guaraqe+maintainer: guaraqe@openmailbox.org+copyright: 2016 guaraqe+build-type: Simple+cabal-version: >=1.10++library+ hs-source-dirs: src+ exposed-modules: Control.ConstraintClasses+ , Control.ConstraintClasses.Extras+ build-depends: base >= 4.7 && < 5+ default-language: Haskell2010++source-repository head+ type: git+ location: https://github.com/guaraqe/constraint-classes
+ src/Control/ConstraintClasses.hs view
@@ -0,0 +1,51 @@+{-# LANGUAGE ConstraintKinds #-}+{-# LANGUAGE TypeFamilies #-}++module Control.ConstraintClasses+ ( CFunctor (..)+ , CFoldable (..) ) where++import GHC.Exts (Constraint)++----------------------------------------------------------------------++class CFunctor f where+ type CFun f a :: Constraint+ type CFun f a = ()++ cmap :: (CFun f a, CFun f b) => (a -> b) -> f a -> f b++----------------------------------------------------------------------++class CFoldable f where++ type CFol f a :: Constraint+ type CFol f a = ()++ cfoldr :: (CFol f a) => (a -> b -> b) -> b -> f a -> b+ cfoldr' :: (CFol f a) => (a -> b -> b) -> b -> f a -> b+ cfoldl :: (CFol f b) => (a -> b -> a) -> a -> f b -> a+ cfoldl' :: (CFol f b) => (a -> b -> a) -> a -> f b -> a++ cfold :: (CFol f m, Monoid m) => f m -> m+ cfold = cfoldMap id++ cfoldMap :: (CFol f a, CFol f m, Monoid m) => (a -> m) -> f a -> m+ cfoldMap f = cfoldr (mappend . f) mempty++ clength :: CFol f a => f a -> Int+ clength = cfoldl (\c _ -> c+1) 0++ cmapM :: (Monad m, CFol f a, CFol f b)+ => (a -> m b) -> f a -> m (f b)++ cforM :: (Monad m, CFol f a, CFol f b)+ => f a -> (a -> m b) -> m (f b)+ cforM = flip cmapM++ cmapM_ :: (Monad m, CFol f a)+ => (a -> m b) -> f a -> m ()++ cforM_ :: (Monad m, CFol f a)+ => f a -> (a -> m b) -> m ()+ cforM_ = flip cmapM_
+ src/Control/ConstraintClasses/Extras.hs view
@@ -0,0 +1,28 @@+module Control.ConstraintClasses.Extras+ ( CZippable (..) ) where++import Control.ConstraintClasses++class CFunctor f => CZippable f where+ czip :: (CFun f a, CFun f b, CFun f (a,b))+ => f a -> f b -> f (a,b)++ czipWith :: ( CFun f a+ , CFun f b+ , CFun f (a,b)+ , CFun f c)+ => (a -> b -> c) -> f a -> f b -> f c+ czipWith f x y = cmap (uncurry f) (czip x y)++ czipWith3 :: ( CFun f a+ , CFun f b+ , CFun f c+ , CFun f (a,b)+ , CFun f ((a,b),c)+ , CFun f d )+ => (a -> b -> c -> d) -> f a -> f b -> f c -> f d+ czipWith3 f x y z = cmap ((uncurry . uncurry) f)+ (czip (czip x y) z)++ czipWith4 :: (CFun f a, CFun f b, CFun f c, CFun f d, CFun f e)+ => (a -> b -> c -> d -> e) -> f a -> f b -> f c -> f d -> f e