some formatting cleanup and current task list
authorCarter Tazio Schonwald <carter.schonwald@gmail.com>
Tue, 7 Nov 2017 01:32:00 +0000 (20:32 -0500)
committerCarter Tazio Schonwald <carter.schonwald@gmail.com>
Tue, 7 Nov 2017 01:32:00 +0000 (20:32 -0500)
.gitignore [new file with mode: 0644]
TODO [new file with mode: 0644]
src/Data/Distribution/Normal.hs
src/Data/Distribution/Permutation.hs
src/System/Random/SplitMix/Internal.hs

diff --git a/.gitignore b/.gitignore
new file mode 100644 (file)
index 0000000..c70beef
--- /dev/null
@@ -0,0 +1 @@
+cabal.project.local
diff --git a/TODO b/TODO
new file mode 100644 (file)
index 0000000..ef0dea0
--- /dev/null
+++ b/TODO
@@ -0,0 +1,15 @@
+Random TODO 
+
+* have fast gen float / double siblings
+* modern travis CI setup
+* moving the c code back into haskell
+* criterion benchmarks to compare
+* test suite to compare impls
+* test suite to validate determination of stream given several seeds
+* migrating the bad seed mitigation stuff from the Java sibling
+* emailing GUY!!!!
+* doc updates 
+* considering UX changes
+* RandomT?? 
+    * Should monadic bind do a split (a la quicheck )
+* cleanup big crush stuff and have that as an ancillary library     
\ No newline at end of file
index 4c25e38..910db8c 100644 (file)
@@ -24,7 +24,7 @@ unitNormalPolarMethodM unitSampler boolSampler = getSample
       y <- unitSampler
       sqrtSumSq   <- return $ hypot x y
       straightSum <- return $ x*x + y*y
-      if straightSum > 1 || straightSum == 0
+      if straightSum >= 1 || straightSum == 0
         --- the usual condition is  x^2 + y^2 > 1, but the same bound holds for the sqrt thereof
         then getSample
         else
index 929b780..9bd6426 100644 (file)
@@ -24,7 +24,7 @@ then swap the values at A[j-1] and A[s]
 
 return the array A
 
-or to quote the fish-yates shuffle entry on wikipedia
+or to quote the fisher-yates shuffle entry on wikipedia
 
 -- To shuffle an array a of n elements (indices 0..n-1):
 for i from 0 to n−2 do
@@ -35,7 +35,7 @@ for i from 0 to n−2 do
 no more than 2^32 elements, mostly because if you're wanting larger permutations theres likely better
 algorithms available
 -}
-samplePermutation :: forall m  .  (Monad m )=> ((Word32,Word32)->m Word32) -> Word32 -> m (DV.Vector  Int32)
+samplePermutation :: forall m  .  (Monad m=> ((Word32,Word32)->m Word32) -> Word32 -> m (DV.Vector  Int32)
 samplePermutation intervalSample wSize
   | wSize == 0 || wSize > 2^(31 ::  Int) = error "i'm not letting you do 0 or > 2^31  element permutations"
   | otherwise = do
index 5674721..14eb41b 100644 (file)
@@ -139,10 +139,12 @@ instance Monad m => Monad (RandomT m) where
 
 sampleWord64RandomT :: Applicative m => RandomT m Word64
 sampleWord64RandomT = RandomT#  $ \ s ->
-                        let (# w, ngen #) = nextWord64SplitMix s
+                        let (# !w, !ngen #) = nextWord64SplitMix s
                            in  pure (w, ngen)
 
-
+--instance PrimMonad m => PrimMonad (RandomT m) where
+--  primitive = \ m ->
+--  {-# INLINE #-}
 
 nextWord64SplitMix :: SplitMix64 -> (# Word64 , SplitMix64 #)
 nextWord64SplitMix gen = mixedRes `seq` (# mixedRes , newgen #)