packages feed

names 0.3 → 0.3.1

raw patch · 4 files changed

+56/−10 lines, 4 filessetup-changed

Files

+ 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