packages feed

sized-vector 1.2.0.0 → 1.3.0.0

raw patch · 3 files changed

+54/−10 lines, 3 filesdep +constraintsdep +criteriondep +paralleldep ~basedep ~deepseqdep ~equational-reasoning

Dependencies added: constraints, criterion, parallel, progression, sized-vector

Dependency ranges changed: base, deepseq, equational-reasoning, type-natural

Files

Data/Vector/Sized.hs view
@@ -165,21 +165,23 @@  -- | 'reverse' @xs@ returns the elements of xs in reverse order. @xs@ must be finite. reverse :: forall a n. Vector a n -> Vector a n-reverse xs0 = case plusZR (sLength xs0) of Refl -> go Nil xs0+reverse xs0 = coerce (plusZR (sLength xs0)) $ go Nil xs0   where     go :: Vector a m -> Vector a k -> Vector a (k :+ m)     go acc Nil = acc-    go acc (x :- xs) = case plusSR (sLength xs) (sLength acc) of Refl -> go (x:- acc) xs+    go acc (x :- xs) = coerce (symmetry $ plusSR (sLength xs) (sLength acc)) $ go (x:- acc) xs           -- | The 'intersperse' function takes an element and a vector and -- \`intersperses\' that element between the elements of the vector. intersperse :: a -> Vector a n -> Vector a ((Two :* n) :- One) intersperse _ Nil = Nil-intersperse a (x :- xs) = case plusSR (sLength xs) (sLength xs) of Refl -> x :- prependToAll a xs+intersperse a (x :- xs) =+  coerce (plusSR (sLength xs) (sLength xs)) $ x :- prependToAll a xs  prependToAll :: a -> Vector a n -> Vector a (Two :* n) prependToAll _ Nil = Nil-prependToAll a (x :- xs) = case plusSR (sLength xs) (sLength xs) of Refl -> x :- a :- prependToAll a xs+prependToAll a (x :- xs) =+  x :- (coerce (plusSR (sLength xs) (sLength xs)) $ a :- prependToAll a xs)  -- | The 'transpose' function transposes the rows and columns of its argument. transpose :: SingRep n => Vector (Vector a n) m -> Vector (Vector a m) n@@ -230,8 +232,7 @@ concat (xs :- xss) =   let n = sLength xs       n0 = sLength xss-  in case plusCommutative (n0 %* n) n of-       Refl -> xs `append` concat xss+  in coerce (symmetry $ plusCommutative (n0 %* n) n) $ xs `append` concat xss  and, or :: Vector Bool m -> Bool -- | 'and' returns the conjunction of a Boolean vector.
+ bench/coercion.hs view
@@ -0,0 +1,29 @@+{-# LANGUAGE QuasiQuotes #-}+module Main where+import           Control.DeepSeq+import           Control.Parallel.Strategies+import           Criterion+import           Data.Type.Natural+import qualified Data.Vector.Sized           as V+import           Progression.Main+import           System.Environment++main :: IO ()+main = do+  name : rest <- getArgs+  v10 <- return $!! ((V.replicate [snat|10|] ()) `using` rdeepseq)+  v100 <- return $!! ((V.replicate [snat|100|] ()) `using` rdeepseq)+  v200 <- return $!! ((V.replicate [snat|200|] ()) `using` rdeepseq)+  withArgs (("-n"++name) : rest) $+    defaultMain $+    bgroup "bench" [ bgroup "reverse"+                     [ bench "10" $ nf V.reverse v10+                     , bench "100" $ nf V.reverse v100+                     , bench "1000" $ nf V.reverse v200+                     ]+                   , bgroup "intersperse"+                     [ bench "10" $ nf (V.intersperse ()) v10+                     , bench "100" $ nf (V.intersperse ()) v100+                     , bench "200" $ nf (V.intersperse ()) v200+                     ]+                   ]
sized-vector.cabal view
@@ -2,7 +2,7 @@ -- documentation, see http://haskell.org/cabal/users-guide/  name:                sized-vector-version:             1.2.0.0+version:             1.3.0.0 synopsis:            Size-parameterized vector types and functions. description:         Size-parameterized vector types and functions using a data-type promotion. homepage:            https://github.com/konn/sized-vector@@ -21,10 +21,24 @@  library   exposed-modules:     Data.Vector.Sized-  build-depends:       base                     >= 2.0 && < 5+  build-depends:       base                     >= 2.0          && < 5                ,       singletons               == 0.8.*-               ,       type-natural             >= 0.0.4.0+               ,       type-natural             == 0.1.*+               ,       constraints                ,       monomorphic              == 0.0.*-               ,       equational-reasoning     == 0.0.*+               ,       equational-reasoning     >= 0.0.3        && < 0.1                ,       hashable                 == 1.1.*                ,       deepseq                  == 1.3.*++Benchmark coercion-bench+  type:                 exitcode-stdio-1.0+  main-is:              coercion.hs+  hs-source-dirs:       bench+  ghc-options:          -O2 -threaded -fcontext-stack=500+  build-depends:        criterion+               ,        progression+               ,        sized-vector+               ,        base+               ,        type-natural+               ,        parallel+               ,        deepseq