names 0.3 → 0.3.1
raw patch · 4 files changed
+56/−10 lines, 4 filessetup-changed
Files
- Setup.hs +4/−0
- Setup.lhs +0/−4
- names.cabal +5/−2
- src/Data/Name.hs +47/−4
+ Setup.hs view
@@ -0,0 +1,4 @@+import Distribution.Simple++main = defaultMain+
− Setup.lhs
@@ -1,4 +0,0 @@-import Distribution.Simple--main = defaultMain-
names.cabal view
@@ -1,5 +1,5 @@ Name: names-Version: 0.3+Version: 0.3.1 Synopsis: Type level names. Description: Type level names. .@@ -16,6 +16,9 @@ [@v0.3@] Reintroduced Unicode for names. Added @Name@ type class. TH is not used internally anymore.+ .+ [@v0.3.1@] Name resolution enhanced via Template Haskell,+ added @names@ macro. License: MIT License-File: LICENSE@@ -34,7 +37,7 @@ Source-Repository head type: darcs location: hub.darcs.net:names- tag: v0.3+ tag: v0.3.1 Library
src/Data/Name.hs view
@@ -1,5 +1,7 @@ {-# LANGUAGE Haskell2010+ , TemplateHaskell , ScopedTypeVariables+ , FlexibleInstances , TypeOperators , DeriveDataTypeable , ScopedTypeVariables@@ -31,7 +33,7 @@ module Data.Name ( (:&), Name (..),- name, nameT, nameV,+ name, nameT, nameV, names, U0, U1, U2, U3, U4, U5, U6, U7, U8, U9, UA, UB, UC, UD, UE, UF,@@ -79,18 +81,30 @@ name str = do t <- nameT str let sig = SigD (mkName str) t- def = ValD (VarP $ mkName str) (NormalB (VarE $ mkName "Data.Name.__")) []+ def = ValD (VarP $ mkName str) (NormalB (VarE '__)) [] return [sig, def] +class Names' a where+ names' :: [String] -> a++instance Names' (TH.Q [Dec]) where+ names' = fmap concat . mapM name++instance Names' a => Names' (String -> a) where+ names' xs x = names' (x:xs)++names :: Names' a => a+names = names' []+ -- FIX: Generate Unicode-Names nameT :: String -> TH.Q Type nameT str = return $ foldr f (last names) (init names) where names = map toName str- f x xs = AppT (AppT (conT ":&") x) xs+ f x xs = AppT (AppT (ConT ''(:&)) x) xs - conT n = ConT (mkName ("Data.Name." ++ n))+ conT = ConT . nameFor toName c | c `elem` ['0'..'9'] = conT ('D' : [c])@@ -108,6 +122,35 @@ nameV :: String -> TH.Q Exp nameV str = nameT str >>= return . SigE (VarE $ mkName "Data.Name.__")++nameFor str = case str of+ "A" -> ''A ; "B" -> ''B ; "C" -> ''C ; "D" -> ''D ; "E" -> ''E ; "F" -> ''F ;+ "G" -> ''G ; "H" -> ''H ; "I" -> ''I ; "J" -> ''J ; "K" -> ''K ; "L" -> ''L ;+ "M" -> ''M ; "N" -> ''N ; "O" -> ''O ; "P" -> ''P ; "Q" -> ''Q ; "R" -> ''R ;+ "S" -> ''S ; "T" -> ''T ; "U" -> ''U ; "V" -> ''V ; "W" -> ''W ; "X" -> ''X ;+ "Y" -> ''Y ; "Z" -> ''Z++ "A_" -> ''A_ ; "B_" -> ''B_ ; "C_" -> ''C_ ; "D_" -> ''D_ ; "E_" -> ''E_ ; "F_" -> ''F_ ;+ "G_" -> ''G_ ; "H_" -> ''H_ ; "I_" -> ''I_ ; "J_" -> ''J_ ; "K_" -> ''K_ ; "L_" -> ''L_ ;+ "M_" -> ''M_ ; "N_" -> ''N_ ; "O_" -> ''O_ ; "P_" -> ''P_ ; "Q_" -> ''Q_ ; "R_" -> ''R_ ;+ "S_" -> ''S_ ; "T_" -> ''T_ ; "U_" -> ''U_ ; "V_" -> ''V_ ; "W_" -> ''W_ ; "X_" -> ''X_ ;+ "Y_" -> ''Y_ ; "Z_" -> ''Z_++ "D0" -> ''D0 ; "D1" -> ''D1 ; "D2" -> ''D2 ; "D3" -> ''D3 ; "D4" -> ''D4 ;+ "D5" -> ''D5 ; "D6" -> ''D6 ; "D7" -> ''D7 ; "D8" -> ''D8 ; "D9" -> ''D9 ;++ "X0" -> ''X0 ; "X1" -> ''X1 ; "X2" -> ''X2 ; "X3" -> ''X3 ; "X4" -> ''X4 ;+ "X5" -> ''X5 ; "X6" -> ''X6 ; "X7" -> ''X7 ; "X8" -> ''X8 ; "X9" -> ''X9 ;+ "XA" -> ''XA ; "XB" -> ''XB ; "XC" -> ''XC ; "XD" -> ''XD ; "XE" -> ''XE ;+ "XF" -> ''XF ;++ "U0" -> ''U0 ; "U1" -> ''U1 ; "U2" -> ''U2 ; "U3" -> ''U3 ; "U4" -> ''U4 ;+ "U5" -> ''U5 ; "U6" -> ''U6 ; "U7" -> ''U7 ; "U8" -> ''U8 ; "U9" -> ''U9 ;+ "UA" -> ''UA ; "UB" -> ''UB ; "UC" -> ''UC ; "UD" -> ''UD ; "UE" -> ''UE ;+ "UF" -> ''UF ;++ _ -> undefined+ data U0 a b c d deriving Typeable data U1 a b c d deriving Typeable