cofunctor (empty) → 0.1.0
raw patch · 4 files changed
+120/−0 lines, 4 filesdep +basesetup-changed
Dependencies added: base
Files
- Data/Cofunctor.lhs +36/−0
- LICENSE +30/−0
- Setup.hs +2/−0
- cofunctor.cabal +52/−0
+ Data/Cofunctor.lhs view
@@ -0,0 +1,36 @@+> module Data.Cofunctor (+> Cofunctor(..)+> ) where+>+> {- |+> The Confunctor class is useful for \"sink-like\" types, especially when+> combined with GADTs. For instance:+>+> > {-# LANGUAGE GADTs #-}+> > data StringStack a where+> > StringStack :: (a -> String) -> [String] -> StringStack a+> >+> > emptyStack :: StringStack String+> > emptyStack = StringStack id []+> >+> > push :: a -> StringStack a -> StringStack a+> > push a (StringStack f ss) = StringStack f (f s : ss)+> >+> > instance Confunctor StringStack where+> > cofmap f (StringStack g ss) = StringStack (g . f) ss+>+> See the "split-chan" package for another example.+> -}++Hopefully we'll have some more interesting supporting functions, classes and+instances here that will make this more useful and perhaps express some+relations with Functors.++> -- | A class for contravariant functors+> class Cofunctor f where+> cofmap :: (b -> a) -> f a -> f b++To Consider:+ - lift product type from Data.Functor.Product to sum type (Either)+ - make instance for wrapped Category with flipped vars+ - ...
+ LICENSE view
@@ -0,0 +1,30 @@+Copyright (c)2011, Brandon Simmons++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 Brandon Simmons 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
+ cofunctor.cabal view
@@ -0,0 +1,52 @@+-- cofunctor.cabal auto-generated by cabal init. For additional+-- options, see+-- http://www.haskell.org/cabal/release/cabal-latest/doc/users-guide/authors.html#pkg-descr.+-- The name of the package.+Name: cofunctor++Version: 0.1.0++Synopsis: A small library providing a contravariant functor class++Description: This library provides a 'Cofunctor' class useful for types+ that are sinks or make use of IO effects. See documentation + for details.++ Some supporting constructions are also provided.++License: BSD3++License-file: LICENSE++Author: Brandon Simmons++Maintainer: brandon.m.simmons@gmail.com++Category: Data++Build-type: Simple++-- Extra files to be distributed with the package, such as examples or+-- a README.+-- Extra-source-files: ++-- Constraint on the version of Cabal needed to build this package.+Cabal-version: >=1.6++source-repository head + type: git+ location: https://github.com/jberryman/cofunctor.git++Library+ -- Modules exported by the library.+ Exposed-modules: Data.Cofunctor+ + -- Packages needed in order to build this package.+ Build-depends: base >= 4 && < 5+ + -- Modules not exported by this package.+ -- Other-modules: + + -- Extra tools (e.g. alex, hsc2hs, ...) needed to build the source.+ -- Build-tools: +