packages feed

aop-prelude 0.4.1.2 → 0.5.0.0

raw patch · 2 files changed

+67/−1 lines, 2 filesPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

+ Combinatorial: consl :: (a, ([a], b)) -> ([a], b)
+ Combinatorial: consr :: (a, (b, [a])) -> (b, [a])
+ Combinatorial: cup :: ([a], [a]) -> [a]
+ Combinatorial: interleave :: [a] -> [([a], [a])]
+ Combinatorial: partitions :: [a] -> [[[a]]]
+ Combinatorial: perms :: [a] -> [[a]]
+ Combinatorial: subseqs :: [a] -> [[a]]
- AOPPrelude: class Eq a
+ AOPPrelude: class () => Eq a
- AOPPrelude: class Num a
+ AOPPrelude: class () => Num a
- AOPPrelude: class Show a
+ AOPPrelude: class () => Show a
- AOPPrelude: data Integer
+ AOPPrelude: data () => Integer
- AOPPrelude: data Natural
+ AOPPrelude: data () => Natural

Files

aop-prelude.cabal view
@@ -4,7 +4,7 @@ -- http://haskell.org/cabal/users-guide/  name:                aop-prelude-version:             0.4.1.2+version:             0.5.0.0 synopsis:            prelude for Algebra of Programming description:         prelude for Algenra of Programming, the original code was created by Richard Bird. homepage:            https://github.com/cutsea110/aop-prelude.git@@ -19,6 +19,7 @@  library   exposed-modules:     AOPPrelude+                     , Combinatorial   -- other-modules:   other-extensions:    NoImplicitPrelude   build-depends:       base >=4.12.0.0 && <4.19, ghc-prim >=0.5.3, integer-gmp
+ src/Combinatorial.hs view
@@ -0,0 +1,65 @@+{-# LANGUAGE NoImplicitPrelude #-}+module Combinatorial+  ( subseqs+  , partitions+  , perms+  , consl, consr+  , cup+  , interleave+  ) where++import AOPPrelude+import Data.List ((\\))++subseqs :: [a] -> [[a]]+subseqs = catalist (e, f)+  where+    e = wrap []+    f = cat . pair (list cons . cpr, outr)++new :: (a, [[a]]) -> [[a]]+new = cons . cross (wrap, id)++glues :: (a, [[a]]) -> [[[a]]]+glues (a, [])   = []+glues (a, x:xs) = [(a:x):xs]++partitions :: [a] -> [[[a]]]+partitions = catalist (e, f)+  where+    e = wrap []+    f = concat . list (cons . pair (new, glues)) . cpr++adds :: (a, [a]) -> [[a]]+adds (a, x) = [y ++ [a] ++ z | (y, z) <- splits x]++perms :: [a] -> [[a]]+perms = catalist (e, f)+  where+    e = wrap []+    f = concat . list adds . cpr++consl :: (a, ([a], b)) -> ([a], b)+consl (a, (x, y)) = (a:x, y)++consr :: (a, (b, [a])) -> (b, [a])+consr (a, (x, y)) = (x, a:y)++cup :: ([a], [a]) -> [a]+cup = uncurry (++)++interleave :: [a] -> [([a], [a])]+interleave = catalist (e, f)+  where+    e = wrap nilp+    f = cup . pair (list consl, list consr) . cpr+    nilp = ([], [])++isEqual :: Eq a => [a] -> [a] -> Bool+xs `isEqual` ys = null (xs \\ ys) && null (ys \\ xs)++elem :: Eq a => [a] -> [[a]] -> Bool+elem x = catalist (e, f)+  where+    e = False+    f (y, b) = b || y `isEqual` x