data SSSP = SSSP { dist :: Int, modified :: Bool} deriving (Eq, Show) sssp2 g = let step v prev curr = let d = prev v .^ dist `min` minimum [ prev u .^ dist + e | (e, u) <- is v, prev u .^ modified] ; m = prev v .^ dist != d in SSSP d m ; init v = SSSP (if vid v == 1 then 0 else 1000000) (vid v == 1) in fregel init step Fix g