Copyright | (C) 2013 Hugo Pacheco |
---|---|
License | BSD-style (see the file LICENSE) |
Maintainer | Hugo Pacheco <hpacheco@nii.ac.jp> |
Stability | provisional |
Safe Haskell | None |
Language | Haskell98 |
Collection of miscellaneous put-based programming examples.
- unzipPut :: (Monad m, Eq a, Eq b) => PutlensM m ([a], [b]) [(a, b)]
- mapPut :: Monad m => PutlensM m b a -> PutlensM m [b] [a]
- unfoldrPut :: (Monad m, Eq a, Eq b) => PutlensM m (b, a) a -> a -> PutlensM m [b] a
- foldrPut :: Monad m => PutlensM m b (Either () (a, b)) -> PutlensM m b [a]
- mfilterPut :: MonadPlus m => (s -> Bool) -> PutlensM m s v -> PutlensM m s v
- unfoldrsPut :: (Monad m, Eq a, Eq b) => PutlensM m (b, a) a -> a -> PutlensM m [b] a
- nilPut :: Monad m => PutlensM m [a] ()
- consPut :: Monad m => PutlensM m [a] (a, [a])
- unnilPut :: Monad m => PutlensM m () [a]
- unconsPut :: Monad m => PutlensM m (a, [a]) [a]
- unheadPut :: (Monad m, Eq a) => PutlensM m [a] a
- untailPut :: (Monad m, Eq a) => PutlensM m [a] [a]
- wrapPut :: (Monad m, Eq a) => PutlensM m [a] a
- unwrapPut :: (Monad m, Eq a) => PutlensM m a [a]
- data Tree a
- unnodePut :: forall m a. Monad m => PutlensM m (a, (Tree a, Tree a)) (Tree a)
- nodePut :: forall m a. Monad m => PutlensM m (Tree a) (a, (Tree a, Tree a))
- unemptyPut :: forall m a. Monad m => PutlensM m () (Tree a)
- emptyPut :: forall m a. Monad m => PutlensM m (Tree a) ()
- catPut :: (Monad m, Eq a) => PutlensM m ([a], [a]) [a]
- exCatPut1 :: [Integer]
- exCatPut2 :: Identity ([Integer], [Integer])
- exCatPut3 :: Identity ([Integer], [Integer])
- exCatPut4 :: Identity ([Integer], [Integer])
- catPutN :: (Monad m, Eq a) => (Maybe ([a], [a]) -> [a] -> Int) -> PutlensM m ([a], [a]) [a]
- catPutN' :: (Monad m, Eq a) => PutlensStateM m Int ([a], [a]) [a]
- catPut2 :: Eq a => PutlensM Identity ([a], [a]) [a]
- exCatPut21 :: [Integer]
- exCatPut22 :: Identity ([Integer], [Integer])
- exCatPut23 :: Identity ([Integer], [Integer])
- exCatPut24 :: Identity ([Integer], [Integer])
- catPutP :: (Monad m, Eq a) => (Maybe (Either [a] [a]) -> a -> m Bool) -> PutlensM m ([a], [a]) [a]
- catPutSame :: (Monad m, Eq a) => PutlensM m ([a], [a]) [a]
- catPutSameMb :: Eq a => PutlensM Identity ([a], [a]) [a]
- exCatPutSame1 :: [Integer]
- exCatPutSame2 :: Identity ([Integer], [Integer])
- exCatPutSame3 :: Identity ([Integer], [Integer])
- catPutPred :: (Monad m, Ord a) => a -> PutlensM m ([a], [a]) [a]
- catPutPredMb :: Ord a => a -> PutlensM Identity ([a], [a]) [a]
- exCatPutPred1 :: [Integer]
- exCatPutPred2 :: Identity ([Integer], [Integer])
- exCatPutPred3 :: Identity ([Integer], [Integer])
- exCatPutPred4 :: Identity ([Integer], [Integer])
- filterlPut :: (Monad m, Eq a, Eq b) => PutlensM m [Either a b] [a]
- filterrPut :: (Monad m, Eq a, Eq b) => PutlensM m [Either a b] [b]
- partitionPut :: (Monad m, Eq a, Eq b) => Bool -> PutlensM m [Either a b] ([a], [b])
- filterleftPut :: (Monad m, Eq a, Eq b) => PutlensM m [Either a b] [a]
- filterPut :: (Monad m, Eq a) => (a -> Bool) -> PutlensM m [a] [a]
- filterrightPut :: (Monad m, Eq a, Eq b) => PutlensM m [Either a b] [b]
- succPut :: Monad m => PutlensM m Int Int
- predPut :: Monad m => PutlensM m Int Int
- data Nat
- unsuccNPut :: forall m. Monad m => PutlensM m Nat Nat
- succNPut :: forall m. Monad m => PutlensM m Nat Nat
- unzeroNPut :: forall m. Monad m => PutlensM m () Nat
- zeroNPut :: forall m. Monad m => PutlensM m Nat ()
- natPut :: Monad m => PutlensM m Nat Int
- int :: Nat -> Int
- nat :: Int -> Nat
- lengthNatPut :: (Monad m, Eq a) => (Int -> a) -> PutlensM m [a] Nat
- exLengthNatPut1 :: Nat
- exLengthNatPut2 :: Identity [Char]
- exLengthNatPut3 :: Identity [Char]
- embedAtPut :: (Monad m, Eq a) => Int -> PutlensM m [a] a
- embedAtPut1 :: (Monad m, Eq a) => Int -> PutlensM m [a] a
- embedAtPut2 :: (Monad m, Eq a) => Int -> PutlensM m [a] a
- embedAtPut2' :: (Monad m, Eq a) => PutlensM m (Int, [a]) a
- embedAtPut3 :: (Monad m, Eq a) => Int -> PutlensM m [a] a
- embedAtPut3' :: (Monad m, Eq a) => PutlensStateM m a (Int, [a]) a
- exEmbedAtPut1 :: Char
- exEmbedAtPut2 :: Identity [Char]
- exEmbedAtPut3 :: Identity [Char]
- exEmbedAtPut4 :: Char
- exEmbedAtPut5 :: Identity [Char]
- embedAtPut4 :: (Monad m, Eq a) => Int -> PutlensM m [a] a
- splitAtPut :: (Monad m, Eq a) => PutlensM m (Int, [a]) ([a], [a])
- exEmbedAtPut41 :: Char
- exEmbedAtPut42 :: Identity [Char]
- exEmbedAtPut43 :: Identity [Char]
- splitPut :: (Monad m, Integral a) => ((a, a) -> a -> m a) -> PutlensM m (a, a) a
- summandsPut1 :: (Monad m, Integral a) => PutlensM m [a] a
- summandsPut2 :: (Monad m, Integral a) => PutlensM m [a] a
- summandsPut3 :: (Monad m, Integral a) => PutlensM m [a] a
- summandsPut3' :: (Monad m, Integral a) => PutlensStateM m a [a] a
- summandsPut4 :: (Monad m, Integral a) => PutlensM m [a] a
- summandsPut4' :: (Monad m, Integral a) => PutlensStateM m a [a] a
- exSummandsPut1 :: Integer
- exSummandsPut2 :: [Integer]
- exSummandsPut3 :: [Integer]
- exSummandsPut4 :: [Integer]
- exSummandsPut5 :: [Integer]
- exSummandsPut6 :: [Integer]
- exSummandsPut7 :: [Integer]
- replicatePut :: (Monad m, Eq a) => PutlensM m (a, Int) [a]
- exReplicatePut1 :: Identity (Char, Int)
- exReplicatePut2 :: Identity (Char, Int)
- replicateListPut :: (Monad m, Eq a) => PutlensM m [(a, Int)] [a]
- recoverzerosPut :: (Monad m, Eq a) => PutlensM m [(a, Int)] [(a, Int)]
- splitListPut :: (Monad m, Eq a) => PutlensM m [[a]] [a]
- exReplicateListPut1 :: [Char]
- exReplicateListPut2 :: Identity [(Char, Int)]
- halvePut :: (Monad m, Eq a) => a -> PutlensM m [a] [a]
- halvePutMb :: Eq a => a -> PutlensM Identity [a] [a]
- exHalvePut1 :: Identity [Char]
- exHalvePut2 :: Identity [Char]
- halvePut2 :: (Monad m, Eq a) => a -> PutlensM m [a] [a]
- halvePut2' :: (Monad m, Eq a) => a -> PutlensM m ([a], Int) ([a], Int)
- exHalvePut21 :: Identity [Char]
- exHalvePut22 :: Identity [Char]
- exHalvePut23 :: Identity [Char]
- halvePut3 :: (Monad m, Eq a) => a -> PutlensM m [a] [a]
- halvePut3' :: (Monad m, Eq a) => a -> PutlensStateM m Int ([a], Int) [a]
- exHalvePut31 :: Identity [Char]
- exHalvePut32 :: Identity [Char]
- exHalvePut33 :: Identity [Char]
- isumPut :: Monad m => PutlensM m [Int] [Int]
- subtractPut :: Monad m => Int -> PutlensM m Int Int
- exIsumPut1 :: [Int]
- exIsumPut2 :: Identity [Int]
- iunsortPut1 :: (Monad m, Ord a) => PutlensM m [a] [a]
- delPut1 :: (Monad m, Ord a) => PutlensM m (a, [a]) [a]
- iunsortPut2 :: (Monad m, Ord a) => PutlensM m [a] [a]
- delPut2 :: (Monad m, Ord a) => PutlensM m (a, [a]) [a]
- exIunsortPut1 :: [Integer]
- exIunsortPut2 :: [Integer]
- exIunsortPut3 :: [Integer]
- qsortPut :: (Monad m, Ord a) => PutlensM m [a] [a]
- qpartitionPut :: (Monad m, Ord a) => PutlensM m (a, [a]) (a, ([a], [a]))
- catPutNonEmptyRight :: (Monad m, Eq a) => PutlensM m ([a], [a]) [a]
- exQsortPut1 :: [Integer]
- exQsortPut2 :: [Integer]
- exQsortPut3 :: [Integer]
- positionsPut :: (Monad m, Eq a) => PutlensM m [a] [(Int, a)]
- positionsPut' :: (Monad m, Eq a) => Int -> PutlensM m [a] [(Int, a)]
- positionsPut2 :: (Monad m, Eq a) => PutlensM m [a] [(Int, a)]
- positionsPut2' :: (Monad m, Eq a) => PutlensReaderM m [(Int, a)] (Int, [a]) [(Int, a)]
- exIntitions1 :: [(Int, Char)]
- exIntitions2 :: [Char]
- exIntitions3 :: [Char]
- appendWithSepPut :: Monad m => String -> PutlensM m (String, String) String
- readPut :: (MonadPlus m, Read a, Show a) => PutlensM m a String
- unwordsIntBool :: PutlensM Maybe [Either Int Bool] String
- unwordsPut :: PutlensM Maybe [String] String
- unfoldr1Put :: (MonadPlus m, Eq a) => PutlensM m (a, a) a -> PutlensM m [a] a
Lists
unzipPut :: (Monad m, Eq a, Eq b) => PutlensM m ([a], [b]) [(a, b)] Source
Unzips a list into two lists (creating empty tail lists by default)
unfoldrPut :: (Monad m, Eq a, Eq b) => PutlensM m (b, a) a -> a -> PutlensM m [b] a Source
Putlens version of foldr
foldrPut :: Monad m => PutlensM m b (Either () (a, b)) -> PutlensM m b [a] Source
Putlens version of unfoldr
mfilterPut :: MonadPlus m => (s -> Bool) -> PutlensM m s v -> PutlensM m s v Source
Putlens version of mfilter
unfoldrsPut :: (Monad m, Eq a, Eq b) => PutlensM m (b, a) a -> a -> PutlensM m [b] a Source
Variant of unfoldrPut
that tries to present the original source branching even when the view value matches the stop condition
Useful for example for cases when we want to always preserve the length of the original source list.
Constructor/destructor putlenses for lists
example of automatically deriving constructor/destructor putlenses for binary trees
unemptyPut :: forall m a. Monad m => PutlensM m () (Tree a) Source
List concatenation
catPutN :: (Monad m, Eq a) => (Maybe ([a], [a]) -> [a] -> Int) -> PutlensM m ([a], [a]) [a] Source
List concatenation (split the view list at position n-1)
catPut2 :: Eq a => PutlensM Identity ([a], [a]) [a] Source
List concatenation (split the view list in half)
exCatPut21 :: [Integer] Source
exCatPut22 :: Identity ([Integer], [Integer]) Source
exCatPut23 :: Identity ([Integer], [Integer]) Source
exCatPut24 :: Identity ([Integer], [Integer]) Source
catPutP :: (Monad m, Eq a) => (Maybe (Either [a] [a]) -> a -> m Bool) -> PutlensM m ([a], [a]) [a] Source
List concatenation (puts elements to the left while satisfying a predicate)
catPutSame :: (Monad m, Eq a) => PutlensM m ([a], [a]) [a] Source
List concatenation (puts elements to the left while being equal)
catPutSameMb :: Eq a => PutlensM Identity ([a], [a]) [a] Source
exCatPutSame1 :: [Integer] Source
exCatPutSame2 :: Identity ([Integer], [Integer]) Source
exCatPutSame3 :: Identity ([Integer], [Integer]) Source
catPutPred :: (Monad m, Ord a) => a -> PutlensM m ([a], [a]) [a] Source
List concatenation (puts elements to the left while smaller than a particular value)
catPutPredMb :: Ord a => a -> PutlensM Identity ([a], [a]) [a] Source
exCatPutPred1 :: [Integer] Source
exCatPutPred2 :: Identity ([Integer], [Integer]) Source
exCatPutPred3 :: Identity ([Integer], [Integer]) Source
exCatPutPred4 :: Identity ([Integer], [Integer]) Source
filterlPut :: (Monad m, Eq a, Eq b) => PutlensM m [Either a b] [a] Source
Left list filtering lens (but will drop some right elements if the view list is smaller).
The argument passed to keepfstOrPut
can be undefined because it will never be used
filterrPut :: (Monad m, Eq a, Eq b) => PutlensM m [Either a b] [b] Source
Right list filtering lens (but will drop some left elements if the view list is smaller).
The argument passed to keepsndOrPut
can be undefined because it will never be used
partitionPut :: (Monad m, Eq a, Eq b) => Bool -> PutlensM m [Either a b] ([a], [b]) Source
List filtering lens that splits a list of eithers into a list two lists. The boolean argument allows controlling the priority of left/right values in the source list.
filterleftPut :: (Monad m, Eq a, Eq b) => PutlensM m [Either a b] [a] Source
Left list filtering lens (that recovers all right elements).
filterrightPut :: (Monad m, Eq a, Eq b) => PutlensM m [Either a b] [b] Source
Right list filtering lens (that recovers all left elements).
Integers
Naturals
unzeroNPut :: forall m. Monad m => PutlensM m () Nat Source
List length
lengthNatPut :: (Monad m, Eq a) => (Int -> a) -> PutlensM m [a] Nat Source
Length as a natural number
List lookup
embedAtPut :: (Monad m, Eq a) => Int -> PutlensM m [a] a Source
Embeds a value at a fixed position in a list
embedAtPut1 :: (Monad m, Eq a) => Int -> PutlensM m [a] a Source
Embeds a value at a fixed position in a list (supports extending the length original list)
embedAtPut2 :: (Monad m, Eq a) => Int -> PutlensM m [a] a Source
Embeds a value at a fixed position in a list (source induction)
embedAtPut3 :: (Monad m, Eq a) => Int -> PutlensM m [a] a Source
Embeds a value at a fixed position in a list (supports extending the length original list) (source induction)
embedAtPut3' :: (Monad m, Eq a) => PutlensStateM m a (Int, [a]) a Source
exEmbedAtPut2 :: Identity [Char] Source
exEmbedAtPut3 :: Identity [Char] Source
exEmbedAtPut5 :: Identity [Char] Source
embedAtPut4 :: (Monad m, Eq a) => Int -> PutlensM m [a] a Source
Embeds a value at a fixed position in a list (splitAt approach)
exEmbedAtPut42 :: Identity [Char] Source
exEmbedAtPut43 :: Identity [Char] Source
List summation
splitPut :: (Monad m, Integral a) => ((a, a) -> a -> m a) -> PutlensM m (a, a) a Source
Splits a view number into two summands (by adding an offset to the original first value)
summandsPut1 :: (Monad m, Integral a) => PutlensM m [a] a Source
Updates the sum of a list (preserves the original source and appends the difference to the end)
summandsPut2 :: (Monad m, Integral a) => PutlensM m [a] a Source
Updates the sum of a list (distributes the difference by dividing it by two at each recursive step) half of the difference is added to the first element of the source, a quarter to the second, and so on until the remainder is 0
summandsPut3 :: (Monad m, Integral a) => PutlensM m [a] a Source
Updates the sum of a list (distributes the difference by dividing it by the length of the original list) distributes the difference evenly among original list numbers
summandsPut3' :: (Monad m, Integral a) => PutlensStateM m a [a] a Source
summandsPut4 :: (Monad m, Integral a) => PutlensM m [a] a Source
Updates the sum of a list (distributes the difference by dividing it by the length of the original list, always preserving the size of the original list even when the view is zero)
summandsPut4' :: (Monad m, Integral a) => PutlensStateM m a [a] a Source
exSummandsPut2 :: [Integer] Source
exSummandsPut3 :: [Integer] Source
exSummandsPut4 :: [Integer] Source
exSummandsPut5 :: [Integer] Source
exSummandsPut6 :: [Integer] Source
exSummandsPut7 :: [Integer] Source
Replicate
exReplicatePut1 :: Identity (Char, Int) Source
exReplicatePut2 :: Identity (Char, Int) Source
replicateListPut :: (Monad m, Eq a) => PutlensM m [(a, Int)] [a] Source
Replicates a list of elements into a sequence of replicated elements
splitListPut :: (Monad m, Eq a) => PutlensM m [[a]] [a] Source
exReplicateListPut2 :: Identity [(Char, Int)] Source
Halve
halvePut :: (Monad m, Eq a) => a -> PutlensM m [a] [a] Source
Takes the first half of a list (with a default empty element)
halvePutMb :: Eq a => a -> PutlensM Identity [a] [a] Source
exHalvePut1 :: Identity [Char] Source
exHalvePut2 :: Identity [Char] Source
halvePut2 :: (Monad m, Eq a) => a -> PutlensM m [a] [a] Source
Takes the first half of a list (using an increasing counter with each consumed element in the forward direction)
exHalvePut21 :: Identity [Char] Source
exHalvePut22 :: Identity [Char] Source
exHalvePut23 :: Identity [Char] Source
halvePut3 :: (Monad m, Eq a) => a -> PutlensM m [a] [a] Source
Takes the first half of a list (using a decreasing counter with the size of the input list, decreased 2 by 2, in the forward direction)
halvePut3' :: (Monad m, Eq a) => a -> PutlensStateM m Int ([a], Int) [a] Source
exHalvePut31 :: Identity [Char] Source
exHalvePut32 :: Identity [Char] Source
exHalvePut33 :: Identity [Char] Source
exIsumPut1 :: [Int] Source
exIsumPut2 :: Identity [Int] Source
Sorting
iunsortPut1 :: (Monad m, Ord a) => PutlensM m [a] [a] Source
Insertion sort (put according to the original relative source order)
iunsortPut2 :: (Monad m, Ord a) => PutlensM m [a] [a] Source
Insertion sort (identity backward transformation)
exIunsortPut1 :: [Integer] Source
exIunsortPut2 :: [Integer] Source
exIunsortPut3 :: [Integer] Source
qsortPut :: (Monad m, Ord a) => PutlensM m [a] [a] Source
Quicksort (put according to the original relative source order)
qpartitionPut :: (Monad m, Ord a) => PutlensM m (a, [a]) (a, ([a], [a])) Source
Partition a list into smaller and bigger elements than a given element
catPutNonEmptyRight :: (Monad m, Eq a) => PutlensM m ([a], [a]) [a] Source
exQsortPut1 :: [Integer] Source
exQsortPut2 :: [Integer] Source
exQsortPut3 :: [Integer] Source
positionsPut :: (Monad m, Eq a) => PutlensM m [a] [(Int, a)] Source
Adds positions to a list (using an higher-order function)
positionsPut2 :: (Monad m, Eq a) => PutlensM m [a] [(Int, a)] Source
Adds positions to a list (using environment)
positionsPut2' :: (Monad m, Eq a) => PutlensReaderM m [(Int, a)] (Int, [a]) [(Int, a)] Source
exIntitions1 :: [(Int, Char)] Source
exIntitions2 :: [Char] Source
exIntitions3 :: [Char] Source
Exception handling
appendWithSepPut :: Monad m => String -> PutlensM m (String, String) String Source
Appends two strings with a separating space
readPut :: (MonadPlus m, Read a, Show a) => PutlensM m a String Source
Parsingpretty-printing lens version using read
show