data-function-meld (empty) → 0.1.0.0
raw patch · 4 files changed
+105/−0 lines, 4 filesdep +basesetup-changed
Dependencies added: base
Files
- LICENSE +30/−0
- Setup.hs +2/−0
- data-function-meld.cabal +23/−0
- src/Data/Function/Meld.hs +50/−0
+ LICENSE view
@@ -0,0 +1,30 @@+Copyright (c) 2016, Eric Brisco + +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 Eric Brisco 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
+ data-function-meld.cabal view
@@ -0,0 +1,23 @@+name: data-function-meld +version: 0.1.0.0 +synopsis: Map the arguments and return value of functions. +description: Map the arguments and return value of functions. +homepage: https://github.com/erisco/data-function-meld +license: BSD3 +license-file: LICENSE +author: Eric Brisco +maintainer: eric.brisco@gmail.com +copyright: Copyright (c) 2015, Eric Brisco +category: Data +build-type: Simple +cabal-version: >=1.10 + +library + + exposed-modules: Data.Function.Meld + + build-depends: base >=4.7 && <4.8 + + hs-source-dirs: src + + default-language: Haskell2010
+ src/Data/Function/Meld.hs view
@@ -0,0 +1,50 @@+{-| Map the arguments and return value of functions. ++General use:++ - @f $* g1 $$ g2 $$ gn *$ h = \x1 xn -> h (f (g1 x1) (g2 x2) (gn xn))@++Examples:++ - @on f g = f $* g $$ g *$ id@+ - @comparing f = compare $* f $$ f *$ id@+ - @f . g = f $* g *$ id@++Work based on <http://conal.net/blog/posts/semantic-editor-combinators Semantic Editor Combinators> (Conal Elliot, 2016/05/19).+-}+module Data.Function.Meld+( ($*)+, ($$)+, (*$)+) where++import Prelude (flip, (.), ($))++-- | Map a function argument.+arg :: (a' -> a) -> (a -> b) -> a' -> b+arg = flip (.)++-- | Map a function return value.+ret :: (b -> c) -> (a -> b) -> a -> c+ret = (.)++-- | Begin melding.+--+-- @f $* g1 $$ g2 $$ gn *$ h = \x1 xn -> h (f (g1 x1) (g2 x2) (gn xn))@+($*) :: (b -> c) -> (a -> b) -> (c -> d) -> a -> d+($*) x f g = ret g (arg f x)+infixl 8 $*++-- | Continue melding.+--+-- @f $* g1 $$ g2 $$ gn *$ h = \x1 xn -> h (f (g1 x1) (g2 x2) (gn xn))@+($$) :: (((b -> c) -> a -> d) -> e) -> (a -> b) -> (c -> d) -> e+($$) f g h = f (ret h . arg g)+infixl 7 $$++-- | Finish melding.+--+-- @f $* g1 $$ g2 $$ gn *$ h = \x1 xn -> h (f (g1 x1) (g2 x2) (gn xn))@+(*$) :: (a -> b) -> a -> b+(*$) = ($)+infixl 6 *$