Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions test/Spec/TemplateHaskell.failing
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
main: test/Spec/TemplateHaskell/TH.hs:22:1: threeQ
main: test/Spec/TemplateHaskell/TH.hs:25:1: intQQ
main: test/Spec/TemplateHaskell/TH.hs:33:1: zero1
main: test/Spec/TemplateHaskell/TH.hs:36:1: zero2
main: test/Spec/TemplateHaskell/TH.hs:39:1: zero3
main: test/Spec/TemplateHaskell/TH.hs:42:1: zero4
Empty file.
7 changes: 7 additions & 0 deletions test/Spec/TemplateHaskell.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
roots = [ "Spec.TemplateHaskell.User.root" ]

type-class-roots = false

unused-types = false

root-instances = []
42 changes: 42 additions & 0 deletions test/Spec/TemplateHaskell/TH.hs
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
module Spec.TemplateHaskell.TH (intQQ, oneQ, twoQ, two, three, threeQ) where

import Language.Haskell.TH
import Language.Haskell.TH.Quote

oneQ :: Q Exp
oneQ = pure . LitE $ IntegerL one

one :: Integer
one = 1

two :: Int
two = 2

twoQ :: Q Exp
twoQ = pure . VarE $ mkName "two"

three :: Int
three = 3

threeQ :: Q [Dec]
threeQ = pure [ValD (VarP $ mkName "three'") (NormalB . VarE $ mkName "three") []]

intQQ :: QuasiQuoter
intQQ = QuasiQuoter
{ quoteExp = pure . LitE . IntegerL . (zero1 +) . read
, quotePat = pure . LitP . IntegerL . (zero2 +) . read
, quoteType = pure . LitT . NumTyLit . (zero3 +) . read
, quoteDec = pure . pure . (\i -> ValD (VarP $ mkName "quote") (NormalB $ LitE $ IntegerL i) []) . (zero4 +) . read
}

zero1 :: Integer
zero1 = 0

zero2 :: Integer
zero2 = 0

zero3 :: Integer
zero3 = 0

zero4 :: Integer
zero4 = 0
22 changes: 22 additions & 0 deletions test/Spec/TemplateHaskell/User.hs
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE QuasiQuotes #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE KindSignatures #-}

module Spec.TemplateHaskell.User where

import Spec.TemplateHaskell.TH
import GHC.TypeLits (Nat)

$(threeQ)

newtype T (a :: Nat) = T Int

root :: T [intQQ|1|]
root = T $ $(oneQ) + [intQQ|1|] + quote + f (1 :: Int) + $(twoQ) + three'
where
f [intQQ|1|] = 1
f _ = 1

quote :: Int
[intQQ|2|]
3 changes: 3 additions & 0 deletions weeder.cabal
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,7 @@ test-suite weeder-test
, tasty
, tasty-hunit-compat
, tasty-golden
, template-haskell
, text
, toml-reader
, weeder
Expand Down Expand Up @@ -107,6 +108,8 @@ test-suite weeder-test
Spec.RangeEnum.RangeEnum
Spec.RootClasses.RootClasses
Spec.StandaloneDeriving.StandaloneDeriving
Spec.TemplateHaskell.TH
Spec.TemplateHaskell.User
Spec.TypeAliasGADT.TypeAliasGADT
Spec.TypeDataDecl.TypeDataDecl
Spec.Types.Types
Expand Down