th-desugar 1.3.0 → 1.3.1
raw patch · 3 files changed
+143/−2 lines, 3 filesdep ~template-haskell
Dependency ranges changed: template-haskell
Files
- CHANGES.md +4/−0
- Test/Splices.hs +136/−0
- th-desugar.cabal +3/−2
CHANGES.md view
@@ -1,3 +1,7 @@+Version 1.3.1+-------------+* Update cabal file to include testing files in sdist.+ Version 1.3.0 ------------- * Update to work with `type Pred = Type` in GHC 7.9. This changed the
+ Test/Splices.hs view
@@ -0,0 +1,136 @@+{- Tests for the th-desugar package++(c) Richard Eisenberg 2013+eir@cis.upenn.edu+-}++{-# LANGUAGE TemplateHaskell, LambdaCase, MagicHash, UnboxedTuples,+ MultiWayIf, ParallelListComp, CPP, BangPatterns,+ ScopedTypeVariables, RankNTypes, TypeFamilies, ImpredicativeTypes,+ DataKinds, PolyKinds #-}+{-# OPTIONS_GHC -fno-warn-missing-signatures -fno-warn-type-defaults+ -fno-warn-name-shadowing #-}++module Test.Splices where++import Data.List+import GHC.Exts+import GHC.TypeLits++import Language.Haskell.TH+import Language.Haskell.TH.Desugar+import Language.Haskell.TH.Desugar.Sweeten++dsSplice :: Q Exp -> Q Exp+dsSplice expq = expq >>= dsExp >>= (return . expToTH)++test1_sections = [| map ((* 3) . (4 +) . (\x -> x * x)) [10, 11, 12] |]+test2_lampats = [| (\(Just x) (Left z) -> x + z) (Just 5) (Left 10) |]+test3_lamcase = [| foldr (-) 0 (map (\case { Just x -> x ; Nothing -> (-3) }) [Just 1, Nothing, Just 19, Nothing]) |]+test4_tuples = [| (\(a, _) (# b, _ #) -> a + b) (1,2) (# 3, 4 #) |]+test5_ifs = [| if (5 > 7) then "foo" else if | Nothing <- Just "bar", True -> "blargh" | otherwise -> "bum" |]+test6_ifs2 = [| if | Nothing <- Nothing, False -> 3 | Just _ <- Just "foo" -> 5 |]+test7_let = [| let { x :: Double; x = 5; f :: Double -> Double; f x = x + 1 } in f (x * 2) + x |]+test8_case = [| case Just False of { Just True -> 1 ; Just _ -> 2 ; Nothing -> 3 } |]+test9_do = [| show $ do { foo <- Just "foo"+ ; let fool = foo ++ "l"+ ; elemIndex 'o' fool+ ; x <- elemIndex 'l' fool+ ; return (x + 10) } |]+test10_comp = [| [ (x, x+1) | x <- [1..10], x `mod` 2 == 0 ] |]+#if __GLASGOW_HASKELL__ >= 707+test11_parcomp = [| [ (x,y) | x <- [1..10], x `mod` 2 == 0 | y <- [2,5..20] ] |]+test12_parcomp2 = [| [ (x,y,z) | x <- [1..10], z <- [3..100], x + z `mod` 2 == 0 | y <- [2,5..20] ] |]+#endif+test13_sig = [| show (read "[10, 11, 12]" :: [Int]) |]++data Record = MkRecord1 { field1 :: Bool, field2 :: Int }+ | MkRecord2 { field2 :: Int, field3 :: Char }++test14_record = [| let r1 = [MkRecord1 { field2 = 5, field1 = False }, MkRecord2 { field2 = 6, field3 = 'q' }]+ r2 = map (\r -> r { field2 = 18 }) r1+ r3 = (head r2) { field1 = True } in+ map (\case MkRecord1 { field2 = some_int, field1 = some_bool } -> show some_int ++ show some_bool+ MkRecord2 { field2 = some_int, field3 = some_char } -> show some_int ++ show some_char) (r3 : r2) |]++test15_litp = [| map (\case { 5 -> True ; _ -> False }) [5,6] |]+test16_tupp = [| map (\(x,y,z) -> x + y + z) [(1,2,3),(4,5,6)] |]++data InfixType = Int :+: Bool+ deriving (Show, Eq)++test17_infixp = [| map (\(x :+: y) -> if y then x + 1 else x - 1) [5 :+: True, 10 :+: False] |]+test18_tildep = [| map (\ ~() -> Nothing :: Maybe Int) [undefined, ()] |]+test19_bangp = [| map (\ !() -> 5) [()] |]+test20_asp = [| map (\ a@(b :+: c) -> (if c then b + 1 else b - 1, a)) [5 :+: True, 10 :+: False] |]+test21_wildp = [| zipWith (\_ _ -> 10) [1,2,3] ['a','b','c'] |]+test22_listp = [| map (\ [a,b,c] -> a + b + c) [[1,2,3],[4,5,6]] |]+-- type signatures in patterns not yet handled by Template Haskell+-- test23_sigp = [| map (\ (a :: Int) -> a + a) [5, 10] |]++test24_fun = [| let f (Just x) = x+ f Nothing = Nothing in+ f (Just (Just 10)) |]++test25_fun2 = [| let f (Just x)+ | x > 0 = x+ | x < 0 = x + 10+ f Nothing = 0+ f _ = 18 in+ map f [Just (-5), Just 5, Just 10, Nothing, Just 0] |]++test26_forall = [| let f :: Num a => a -> a+ f x = x + 10 in+ (f 5, f 3.0) |]++data Proxy a = Proxy+ deriving Show+ +test27_kisig = [| let f :: Proxy (a :: Bool) -> ()+ f _ = () in+ (f (Proxy :: Proxy False), f (Proxy :: Proxy True)) |]+test28_tupt = [| let f :: (a,b) -> a+ f (a,_) = a in+ map f [(1,'a'),(2,'b')] |]+test29_listt = [| let f :: [[a]] -> a+ f = head . head in+ map f [ [[1]], [[2]] ] |]+test30_promoted = [| let f :: Proxy '() -> Proxy '[Int, Bool] -> ()+ f _ _ = () in+ f Proxy Proxy |]+test31_constraint = [| let f :: Proxy (c :: * -> Constraint) -> ()+ f _ = () in+ [f (Proxy :: Proxy Eq), f (Proxy :: Proxy Show)] |]+test32_tylit = [| let f :: Proxy (a :: Symbol) -> Proxy (b :: Nat) -> ()+ f _ _ = () in+ f (Proxy :: Proxy "Hi there!") (Proxy :: Proxy 10) |]+test33_tvbs = [| let f :: forall a (b :: * -> *). Monad b => a -> b a+ f = return in+ [f 1, f 2] :: [Maybe Int] |]++test34_let_as = [| let a@(Just x) = Just 5 in+ show x ++ show a |]++type Pair a = (a, a)+test35_expand = [| let f :: Pair a -> a+ f = fst in+ f |]++type Const a b = b+test36_expand = [| let f :: Const Int (,) Bool Char -> Char+ f = snd in+ f |]++#if __GLASGOW_HASKELL__ >= 709+test37_pred = [| let f :: (Read a, (Show a, Num a)) => a -> a+ f x = read (show x) + x in+ (f 3, f 4.5) |]++test38_pred2 = [| let f :: a b => Proxy a -> b -> b+ f _ x = x in+ (f (Proxy :: Proxy Show) False, f (Proxy :: Proxy Num) (3 :: Int)) |]++test39_eq = [| let f :: (a ~ b) => a -> b+ f x = x in+ (f ()) |]+#endif
th-desugar.cabal view
@@ -1,5 +1,5 @@ name: th-desugar-version: 1.3.0+version: 1.3.1 cabal-version: >= 1.10 synopsis: Functions to desugar Template Haskell homepage: http://www.cis.upenn.edu/~eir/packages/th-desugar@@ -26,7 +26,7 @@ source-repository this type: git location: https://github.com/goldfirere/th-desugar.git- tag: v1.3.0+ tag: v1.3.1 library build-depends: @@ -47,6 +47,7 @@ ghc-options: -Wall -Werror -main-is Test.Run default-language: Haskell2010 main-is: Test/Run.hs+ other-modules: Test.Splices build-depends: base >= 4 && < 5,