----------------------------------------------------------------------------- -- -- Module : Language.PureScript.Pretty.Common -- Copyright : (c) Phil Freeman 2013 -- License : MIT -- -- Maintainer : Phil Freeman -- Stability : experimental -- Portability : -- -- | -- Common pretty-printing utility functions -- ----------------------------------------------------------------------------- {-# LANGUAGE GeneralizedNewtypeDeriving, GADTs #-} module Language.PureScript.Pretty.Common where import Data.Char import Control.Monad.State import qualified Control.Category as C import Control.Category ((>>>)) import qualified Control.Arrow as A import Control.Arrow ((***), (<+>)) import Language.PureScript.Names -- | -- Convert an Ident into a valid Javascript identifier: -- -- * Alphanumeric characters are kept unmodified -- -- * Symbols are encoded as a dollar symbol ($) followed by their ordinal value -- identToJs :: Ident -> String identToJs (Ident name) = concatMap identCharToString name identToJs (Op op) = concatMap identCharToString op identCharToString :: Char -> String identCharToString c | isAlphaNum c = [c] identCharToString '_' = "_" identCharToString c = '$' : show (ord c) -- | -- Wrap a string in parentheses -- parens :: String -> String parens s = ('(':s) ++ ")"