mkClassTyConOcc, mkClassDataConOcc,
isTvOcc, isTCOcc, isVarOcc, isConSymOcc, isConOcc, isSymOcc,
+ isWildCardOcc, isAnonOcc,
pprOccName, occNameString, occNameFlavour,
-- The basic form of names
#include "HsVersions.h"
-import Char ( isAlpha, isUpper, isLower, isAlphanum, ord )
+#if __HASKELL1__ > 4
+#define ISALPHANUM isAlphaNum
+#else
+#define ISALPHANUM isAlphanum
+#endif
+
+import Char ( isAlpha, isUpper, isLower, ISALPHANUM, ord )
import Util ( thenCmp )
import FiniteMap ( FiniteMap, emptyFM, lookupFM, addToFM, elemFM )
import Outputable
occNameFlavour (OccName TCOcc s _ _) = "Type constructor or class"
isVarOcc, isTCOcc, isTvOcc,
- isConSymOcc, isSymOcc :: OccName -> Bool
+ isConSymOcc, isSymOcc, isWildCardOcc :: OccName -> Bool
isVarOcc (OccName VarOcc _ _ _) = True
isVarOcc other = False
isSymOcc (OccName _ s _ _) = isLexSym s
isConOcc (OccName _ s _ _) = isLexCon s
+
+isWildCardOcc (OccName _ s _ _) = (_HEAD_ s) == '_' && _LENGTH_ s == 1
+
+isAnonOcc (OccName _ s _ _) = (_HEAD_ s) == '_'
\end{code}
\begin{code}
identToC :: String -> FAST_STRING
identToC str
- | all isAlphanum str && not std = _PK_ str
+ | all ISALPHANUM str && not std = _PK_ str
| std = _PK_ ("Zs" ++ encode str)
| otherwise = _PK_ (encode str)
where
identFsToC :: FAST_STRING -> FAST_STRING
identFsToC fast_str
- | all isAlphanum str && not std = fast_str
+ | all ISALPHANUM str && not std = fast_str
| std = _PK_ ("Zs" ++ encode str)
| otherwise = _PK_ (encode str)
where
encode (c:cs) = encode_ch c ++ encode cs
encode_ch :: Char -> String
-encode_ch c | isAlphanum c = [c]
+encode_ch c | ISALPHANUM c = [c]
-- Common case first
encode_ch 'Z' = "ZZ"
encode_ch '&' = "Za"
encode_ch '<' = "Zl"
encode_ch '-' = "Zm"
encode_ch '!' = "Zn"
-encode_ch '.' = "Zd"
+encode_ch '.' = "Zs"
encode_ch '\'' = "Zq"
encode_ch '*' = "Zt"
encode_ch '+' = "Zp"