packages feed

pointless-lenses 0.0.2 → 0.0.3

raw patch · 2 files changed

+59/−4 lines, 2 files

Files

pointless-lenses.cabal view
@@ -1,5 +1,5 @@ Name:            pointless-lenses-Version:         0.0.2+Version:         0.0.3 License:         BSD3 License-file:    LICENSE Author:          Alcino Cunha <alcino@di.uminho.pt>, Hugo Pacheco <hpacheco@di.uminho.pt>@@ -23,9 +23,10 @@   Hs-Source-Dirs: src   Build-Depends:        base >= 3 && < 5, pointless-haskell >= 0.0.2, haskell98, process   exposed-modules:-        Generics.Pointless.Lenses.Combinators+        Generics.Pointless.Lenses.Combinators,         Generics.Pointless.Lenses.RecursionPatterns,-        Generics.Pointless.Lenses.Reader.RecursionPatterns-        Generics.Pointless.Lenses.Examples.Examples+        Generics.Pointless.Lenses.Reader.RecursionPatterns,+        Generics.Pointless.Lenses.Examples.Examples,+        Generics.Pointless.Lenses    extensions: ScopedTypeVariables, FlexibleContexts, Rank2Types, TypeOperators, TypeFamilies
+ src/Generics/Pointless/Lenses.hs view
@@ -0,0 +1,54 @@+-----------------------------------------------------------------------------+-- |+-- Module      :  Generics.Pointless.Lenses+-- Copyright   :  (c) 2009 University of Minho+-- License     :  BSD3+--+-- Maintainer  :  hpacheco@di.uminho.pt+-- Stability   :  experimental+-- Portability :  non-portable+--+-- Pointless Lenses:+-- bidirectional lenses with point-free programming+-- +-- This module defines the structure of lenses and provides Quickcheck procedures to test lens well-behavedness.+--+-----------------------------------------------------------------------------++module Generics.Pointless.Lenses where+    +import Generics.Pointless.Functors++-- | The data type of lenses+data Lens c a = Lens { get :: c  -> a+                     , put :: (a,c) -> c+                     , create :: a -> c+                     }++-- | The type of natural lenses.+-- Lenses that encode bidirectional natural transformations.+type NatLens f g = forall x. x -> Lens (Rep f x) (Rep g x)++-- | Increment a number.+inc_lns :: Enum a => Lens a a+inc_lns = Lens succ (pred . fst) pred++-- | Decrement a number.+dec_lns :: Enum a => Lens a a+dec_lns = Lens pred (succ . fst) succ++-- | QuickCheck procedure to test if a lens is well-behaved.+wb :: (Eq a,Eq c) => Lens c a -> a -> c -> Bool+wb l a c = putget l a c && getput l c && createget l a++-- | QuickCheck procedure to test if a lens satisfies the PutGet law.+putget :: (Eq a,Eq c) => Lens c a -> a -> c -> Bool+putget l a c = get l (put l (a,c)) == a++-- | QuickCheck procedure to test if a lens satisfies the GetPut law.+getput :: Eq c => Lens c a -> c -> Bool+getput l c = put l (get l c,c) == c++-- | QuickCheck procedure to test if a lens satisfies the CreateGet law.+createget :: Eq a => Lens c a -> a -> Bool+createget l a = get l (create l a) == a