liquid-fixpoint-0.1.0.0: src/Language/Fixpoint/Names.hs
{-# LANGUAGE ScopedTypeVariables #-}
-- | This module contains Haskell variables representing globally visible names.
-- Rather than have strings floating around the system, all constant names
-- should be defined here, and the (exported) variables should be used and
-- manipulated elsewhere.
module Language.Fixpoint.Names (
-- * Hardwired global names
dummyName
, preludeName
, boolConName
, funConName
, listConName
, tupConName
, propConName
, strConName
, vvName
, symSepName
, dropModuleNames
, takeModuleNames
) where
import Data.List (intercalate)
import Language.Fixpoint.Misc (errorstar, safeLast, stripParens)
----------------------------------------------------------------------------
--------------- Global Name Definitions ------------------------------------
----------------------------------------------------------------------------
preludeName = "Prelude"
dummyName = "_LIQUID_dummy"
boolConName = "Bool"
funConName = "->"
listConName = "[]" -- "List"
tupConName = "()" -- "Tuple"
propConName = "Prop"
strConName = "Str"
vvName = "VV"
symSepName = '#'
-- dropModuleNames [] = []
-- dropModuleNames s
-- | s == tupConName = tupConName
-- | otherwise = safeLast msg $ words $ dotWhite `fmap` stripParens s
-- where
-- msg = "dropModuleNames: " ++ s
-- dotWhite '.' = ' '
-- dotWhite c = c
dropModuleNames = mungeModuleNames safeLast "dropModuleNames: "
takeModuleNames = mungeModuleNames safeInit "takeModuleNames: "
safeInit _ xs@(_:_) = intercalate "." $ init xs
safeInit msg _ = errorstar $ "safeInit with empty list " ++ msg
mungeModuleNames _ _ [] = []
mungeModuleNames f msg s
| s == tupConName = tupConName
| otherwise = f (msg ++ s) $ words $ dotWhite `fmap` stripParens s
where
dotWhite '.' = ' '
dotWhite c = c