@@ -0,0 +1,37 @@
1+{-# LANGUAGE DataKinds #-}
2+{-# LANGUAGE FlexibleInstances #-}
3+{-# LANGUAGE FunctionalDependencies #-}
4+{-# LANGUAGE MultiParamTypeClasses #-}
5+{-# LANGUAGE OverlappingInstances #-}
6+{-# LANGUAGE QuasiQuotes #-}
7+{-# LANGUAGE TypeFamilies #-}
8+{-# LANGUAGE TypeOperators #-}
9+{-# LANGUAGE UndecidableInstances #-}
10+module Servant.API.QQSpec where
11+
12+import Test.Hspec
13+
14+import Servant.API
15+{-import Servant.API.QQ-}
16+
17+data HTrue
18+data HFalse
19+
20+-- Kiselyov's Type Equality predicate
21+class TypeEq x y b | x y -> b where { areEq :: x -> y -> Bool }
22+instance TypeEq x x HTrue where { areEq _ _ = True }
23+instance b ~ HFalse => TypeEq x y b where { areEq _ _ = False}
24+
25+type SimpleGet = [sitemap|
26+GET hello ()
27+|]
28+
29+type SimpleGet' = "hello" :> Get ()
30+type SimpleGet'' = "hello" :> Get Bool
31+
32+spec :: Spec
33+spec = do
34+ describe "'sitemap' QuasiQuoter" $ do
35+ it "Handles simple GET types" $ do
36+ areEq (undefined::SimpleGet) (undefined::SimpleGet') `shouldBe` True
37+ areEq (undefined::SimpleGet) (undefined::SimpleGet'') `shouldBe` False