----------------------------------------------------------------------------- -- | -- Module : Berp.Base.Mangle -- Copyright : (c) 2010 Bernie Pope -- License : BSD-style -- Maintainer : florbitous@gmail.com -- Stability : experimental -- Portability : ghc -- -- Name mangling. -- -- We need to mangle Python's identifier names when we compiled them to -- Haskell names because: -- 1) Python allows some identifiers which are illegal in Haskell, -- such as leading upper case letters. -- 2) We introduce our own "temporary" variables into a compiled program. -- Name mangling helps to avoid accidental name clash. -- 3) We import many Haskell primitives into the compiled program. -- Name mangling helps to avoid accidental name clash. -- ----------------------------------------------------------------------------- module Berp.Base.Mangle (mangle, deMangle) where import Data.List (isPrefixOf) sourcePrefix :: String sourcePrefix = "_s_" mangle :: String -> String mangle = (sourcePrefix ++) deMangle :: String -> String deMangle str | sourcePrefix `isPrefixOf` str = drop (length sourcePrefix) str | otherwise = str