Skip to content

Instantly share code, notes, and snippets.

@bradparker
Created December 4, 2018 22:42
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save bradparker/139a023de6c43771932bb94c5ded01ef to your computer and use it in GitHub Desktop.
Save bradparker/139a023de6c43771932bb94c5ded01ef to your computer and use it in GitHub Desktop.
Expanding int maps
module ExpandMap
( expandIntMap
) where
import Control.Monad.State (evalState, get, put)
import Data.IntMap (IntMap)
import qualified Data.IntMap as IntMap
import Data.Traversable (for)
-- >>> expandIntMap '0' 50 (IntMap.fromList (zip [0,5..50] ['a' .. 'z']))
-- "aaaaabbbbbcccccdddddeeeeefffffggggghhhhhiiiiijjjjjk"
expandIntMap :: a -> Int -> IntMap a -> [a]
expandIntMap a n m =
flip evalState a $
for [0 .. n] $ \i ->
maybe (pure ()) put (IntMap.lookup i m) *> get
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment