indexed-free (empty) → 0.1
raw patch · 4 files changed
+89/−0 lines, 4 filesdep +basedep +indexedsetup-changed
Dependencies added: base, indexed
Files
- Control/Monad/Indexed/Free.hs +35/−0
- LICENSE +30/−0
- Setup.hs +2/−0
- indexed-free.cabal +22/−0
+ Control/Monad/Indexed/Free.hs view
@@ -0,0 +1,35 @@+{-# LANGUAGE GADTs #-} +----------------------------------------------------------------------------- +-- | +-- Module : Control.Monad.Indexed.Free +-- Copyright : (C) 2013 Fumiaki Kinoshita +-- License : BSD-style (see the file LICENSE) +-- +-- Maintainer : Fumiaki Kinsohita <fumiexcel@gmail.com> +-- Stability : provisional +-- Portability : non-portable +-- +---------------------------------------------------------------------------- +module Control.Monad.Indexed.Free (IxFree(..)) where + +import Control.Monad.Indexed + +data IxFree f i j x where + Pure :: a -> IxFree f i i a + Free :: f i j (IxFree f j k a) -> IxFree f i k a + +instance IxFunctor f => IxFunctor (IxFree f) where + imap f (Pure a) = Pure (f a) + imap f (Free w) = Free (imap (imap f) w) + +instance IxFunctor f => IxPointed (IxFree f) where + ireturn = Pure + +instance IxFunctor f => IxApplicative (IxFree f) where + iap (Pure a) (Pure b) = Pure (a b) + iap (Pure a) (Free fb) = Free (imap a `imap` fb) + iap (Free fa) mb = Free $ imap (`iap` mb) fa + +instance IxFunctor f => IxMonad (IxFree f) where + ibind k (Pure a) = k a + ibind k (Free fm) = Free $ imap (ibind k) fm
+ LICENSE view
@@ -0,0 +1,30 @@+Copyright (c) 2013, Fumiaki Kinoshita + +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 Fumiaki Kinoshita 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
+ indexed-free.cabal view
@@ -0,0 +1,22 @@+name: indexed-free +version: 0.1 +synopsis: indexed monads for free +description: A free indexed monad +homepage: https://github.com/fumieval/indexed-free +license: BSD3 +license-file: LICENSE +author: Fumiaki Kinoshita +maintainer: Fumiaki Kinoshita <fumiexcel@gmail.com> +copyright: Copyright (C) 2013 Fumiaki Kinoshita +category: Language +build-type: Simple +cabal-version: >=1.8 + +source-repository head + type: git + location: https://github.com/fumieval/indexed-free.git + +library + exposed-modules: Control.Monad.Indexed.Free + + build-depends: base ==4.*, indexed < 0.2