2009/9/27 Paul Moore <p.f.mo...@gmail.com>: > I'm still playing round with my random dieroll generation program. In > doing so, I just hit a segmentation fault (I didn't think Haskell > could *cause* a segfault!) I'm sure it's my code - I got this to > compile by fiddling with types until the errors (which I didn't > understand) went away. Certainly not the right way to code, I know, > but never mind. > > The problem is that I have *no idea* how to begin debugging this. In > C, Python, or any other imperative language, I'd put traces in, etc. > But in Haskell, I don't even know where to start. > > I attach the code below. While help in the form of pointers to what I > did wrong would of course be appreciated, what I'm really looking for > is a pointer on how I'd find out for myself. (Hey! I just read the bit > in the ghc manual which says if I am not using foreign or unsafe > functions, a crash is a compiler bug. Did I find a compiler bug?) > > My code is below. All I did is ghc --make hist_3d6.hs, then run > hist_3d6.exe. This is ghc 6.10.4 on Windows Vista Home 32-bit. > > Thanks for any help, > Paul. > > import System.Random.Mersenne > import qualified Data.Map as Map > import Data.Map (Map) > import Data.List > > takes :: Int -> [a] -> [[a]] > takes n [] = [] > takes n xs = take n xs : takes n (drop n xs) > > sums :: Num a => Int -> [a] -> [a] > sums n xs = map sum (takes n xs) > > simulate :: Int -> IO [Double] > simulate count = do > gen <- newMTGen Nothing > dice <- (randoms gen :: IO [Double]) > return (take count dice) > > histogram :: Ord a => [a] -> [(a,Int)] > histogram = Map.assocs . foldl' f Map.empty > where > f m k = Map.insertWith' (+) k 1 m > > simulation = do > lst <- simulate 100000 > return lst > --return (histogram lst) > > main = do > s <- simulation > putStrLn (show s) > _______________________________________________ > Haskell-Cafe mailing list > Haskell-Cafe@haskell.org > http://www.haskell.org/mailman/listinfo/haskell-cafe >
mersenne-random uses the FFI, so it's probably that. I just ran your code with mersenne-random-1.0 and didn't get a segfault. What version are you using? _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe