packages feed

tuple-th 0.2.2 → 0.2.3

raw patch · 2 files changed

+58/−14 lines, 2 filesdep ~base

Dependency ranges changed: base

Files

TupleTH.hs view
@@ -6,13 +6,11 @@ -- -- @ $('catTuples' 1 2) = \\x (y,z) -> (x,y,z) @ module TupleTH(-    -- * Types-        htuple,     -- * Transformation-        mapTuple, mapTuple', filterTuple, filterTuple', reindexTuple, reverseTuple, rotateTuple, subtuples, deleteAtTuple, +        mapTuple, mapTuple', filterTuple, filterTuple', reindexTuple, reverseTuple, rotateTuple, subtuples, deleteAtTuple, takeTuple, dropTuple, safeDeleteTuple,      -- * Combination-        zipTuple, catTuples,uncatTuple,-        -- ** ZipWith+        zipTuple, catTuples, uncatTuple, splitTupleAt,+    -- ** ZipWith         zipTupleWith, zipTupleWith',     -- * Construction         safeTupleFromList, tupleFromList, constTuple, @@ -29,7 +27,9 @@         anyTuple, anyTuple',          allTuple, allTuple',     -- * Monadic/applicative-        sequenceTuple, sequenceATuple+        sequenceTuple, sequenceATuple,+    -- * Types+        htuple,     ) where  import Language.Haskell.TH@@ -39,7 +39,8 @@ import Control.Monad import Control.Applicative import Control.Exception-import Data.Set as Set+import qualified Data.Set as Set+import Data.Set(member)   -- | Makes a homogenous tuple type of the given size and element type @@ -279,13 +280,22 @@ catTuples n m = withxs n (\xsp xes -> withys m (\ysp yes ->     lamE [xsp,ysp] (tupE (xes ++ yes)))) --- | @uncatTuple n m@ is the inverse function of @uncurry (catTuples n m)@. +-- | @uncatTuple n m = 'splitTupleAt' (n+m) n +--+-- @uncatTuple n m@ is the inverse function of @uncurry (catTuples n m)@.  uncatTuple :: Int -> Int -> Q Exp-uncatTuple n m = withxs (n+m) (\xsp xes -> -    lam1E xsp (tupE [tupE (take n xes),  tupE (drop n xes) ]))+uncatTuple n m = splitTupleAt (n+m) n  +-- | @splitTupleAt n i@ => @\(x_0, ..., x_{n-1}) -> ((x_0, ..., x_{i-1}),(x_i, ..., x_{n-1})@ +splitTupleAt :: Int -> Int -> Q Exp+splitTupleAt n i = + withxs n (\xsp xes -> +    case splitAt i xes of+         (l,r) -> lam1E xsp (tupE [tupE l, tupE r]))  --- | @reindexTuple n js@ creates the function+++-- | @reindexTuple n js@ => -- -- > \(x_0, ..., x_{n-1}) -> (x_{js !! 0}, x_{js !! 1}, ... x_{last js}) --@@ -406,3 +416,33 @@         deleteAt i (x:xs) = x : deleteAt (i-1) xs         deleteAt _ _ = assert False undefined ++-- | @takeTuple n i = \(x_0, ..., x_{n-1}) -> (x_0, ..., x_{m-1})@+takeTuple :: Int -> Int -> Q Exp+takeTuple n i = reindexTuple n [0..i-1] ++-- | @dropTuple n i = \(x_0, ..., x_{n-1}) -> (x_i, ..., x_{n-1})@+dropTuple :: Int -> Int -> Q Exp+dropTuple n i = reindexTuple n [i..n-1]++safeDeleteTuple :: Int -> Q Exp+safeDeleteTuple n = do+    e <- newName "_deletee" +    withxs n (\xsp xes ->+        lamE [varP e, xsp] (++            let+                ixes = zip [0::Int ..] xes++                ges = map (\(i,xe) ->+                            normalGE  +                                [| $(varE e) == $(xe) |]+                                [| Just $((tupE . map snd . filter ((/= i) . fst)) ixes) |] +                          )+                           ixes+                        ++                last_ge = normalGE [|otherwise|] [|Nothing|]++            in+                caseE [|()|] [match wildP (guardedB (ges ++ [last_ge])) []]))
tuple-th.cabal view
@@ -1,5 +1,5 @@ Name:                tuple-th-Version:             0.2.2+Version:             0.2.3 Synopsis:            Generate (non-recursive) utility functions for tuples of statically known size Description:         Template Haskell functions for generating functions similar to those in Data.List for tuples of statically known size. License:             BSD3@@ -8,9 +8,13 @@ Maintainer:          anotheraddress@gmx.de Category:            Template Haskell, Data Build-type:          Simple-Cabal-version:       >=1.2-extra-source-files:  tests/Test.hs+Cabal-version:       >=1.6+Extra-source-files:  tests/Test.hs+Bug-reports:         https://github.com/DanielSchuessler/tuple-th/issues +Source-Repository head+    Type: git+    Location: git://github.com/DanielSchuessler/tuple-th.git  Library   Exposed-modules: TupleTH