Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 5 additions & 3 deletions Control/Monad/Levels.hs
Original file line number Diff line number Diff line change
Expand Up @@ -45,9 +45,10 @@ newtype Levels a = Levels { levels :: [FMList a] }
runLevels :: Levels a -> [a]
runLevels = toList . foldr append empty . levels

instance Semigroup (Levels a) where
a <> b = Levels (empty : merge (levels a) (levels b))
instance Monoid (Levels a) where
mempty = Levels []
a `mappend` b = Levels (empty : merge (levels a) (levels b))

-- like 'zipWith append' without cutting the longer list
merge :: [FMList a] -> [FMList a] -> [FMList a]
Expand Down Expand Up @@ -80,7 +81,8 @@ idfsBy n a = toList $ foldr append empty [ unFM a yield ! d | d <- [0,n..] ]
-- to iterative deepening search.
newtype DepthBound a = DepthBound { (!) :: Int -> FMList a }

instance Semigroup (DepthBound a) where
a <> b = DepthBound (\d -> if d==0 then empty
else append (a!(d-1)) (b!(d-1)))
instance Monoid (DepthBound a) where
mempty = DepthBound (const empty)
a `mappend` b = DepthBound (\d -> if d==0 then empty
else append (a!(d-1)) (b!(d-1)))