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