{- single-source shortest path problem -} data SVal = SVal { dist :: Int } deriving (Eq, Show) sssp g = let init v = SVal (if vid v == 1 then 0 else 100000) ; step v prev curr = let newdist = prev v .^ dist `min` minimum [ prev u .^ dist + e | (e, u) <- is v ] in SVal newdist in fregel init step Fix g