
On Sun, 22 Feb 2015 10:34:23 +0100, Jeremy
Compared to the Nim code [https://github.com/logicchains/LPATHBench/blob/master/nim.nim] for a longest path algorithm, Haskell [https://github.com/logicchains/LPATHBench/blob/master/hs.hs] looks horrendously verbose and ugly, even if you ignore the pragmas and imports.
Is this idiomatic Haskell style? Could it be clearer, but has to be written that way for performance - although it still takes 3.7x as long as the Nim version
You can replace case isVisited of True -> return () False -> do with unless isVisited $ do in several places. ("unless" is from Control.Monad) Other options for simplification: 76 if dist > maxVal then writeIORef max dist else return ()) -> 76 when (dist > maxVal) $ writeIORef max dist ("when" is also from Control.Monad) if dist > maxDist then dist else maxDist -> max dist maxDist in several places. Note, the you cannot use the function max, if you used max as a variable name, like in max <- GV.foldM' acc (0::Int32) (nodes V.! (fromIntegral nodeID)) (If you use -Wall when compiling, you probably get a warning when you use max as a variable name) Replace: newMax <- case isVisited of True -> return maxDist False -> do -> newMax <- if isVisited then return maxDist else do You used fromIntegral quite a lot, could you change some type(s) to prevent this? Regards, Henk-Jan van Tuyl -- Folding@home What if you could share your unused computer power to help find a cure? In just 5 minutes you can join the world's biggest networked computer and get us closer sooner. Watch the video. http://folding.stanford.edu/ http://Van.Tuyl.eu/ http://members.chello.nl/hjgtuyl/tourdemonad.html Haskell programming --