module Language.Haskell.FreeTheorems.NameStores
( typeNameStore
, relationNameStore
, typeExpressionNameStore
, functionNameStore1
, functionNameStore2
, variableNameStore
) where
import Data.List (unfoldr)
typeNameStore :: [String]
typeNameStore = createNames "abcde" 'a'
relationNameStore :: [String]
relationNameStore = createNames "RS" 'R'
typeExpressionNameStore :: [String]
typeExpressionNameStore = createNames "" 't'
functionNameStore1 :: [String]
functionNameStore1 = createNames "fgh" 'f'
functionNameStore2 :: [String]
functionNameStore2 = createNames "pqrs" 'p'
variableNameStore :: [String]
variableNameStore = createNames "xyzvwabcdeijklmn" 'x'
createNames :: [Char] -> Char -> [String]
createNames prefixes prefix =
let unpack is = case is of { (c:cs) -> Just ([c], cs) ; otherwise -> Nothing }
in unfoldr unpack prefixes ++ (map (\i -> prefix : show i) [1..])