shady-gen-0.5.1: src/Data/NameM.hs
-- {-# LANGUAGE #-}
{-# OPTIONS_GHC -Wall #-}
----------------------------------------------------------------------
-- |
-- Module : Data.NameM
-- Copyright : (c) Conal Elliott 2009
-- License : AGPLv3
--
-- Maintainer : conal@conal.net
-- Stability : experimental
--
-- Name supply monad. Non-abstract synonym for @State [String]@
----------------------------------------------------------------------
module Data.NameM (NameM, genName, runNameM, allNames) where
import Control.Monad.State
type NameM = State [String]
-- Generate a new variable name
genName :: State [x] x
genName = do x:xs' <- get
put xs'
return x
runNameM :: NameM a -> a
runNameM m = evalState m allNames
allNames :: [String]
allNames = map reverse (tail names)
where
names = "" : [ c:cs | cs <- names , c <- ['a' .. 'z'] ]