blob: 600880f88779a78a570d7e7f4dfa5793319f044b (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
{-# LANGUAGE DeriveAnyClass #-}
{-# LANGUAGE DerivingStrategies #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE StandaloneDeriving #-}
{-# LANGUAGE TemplateHaskell #-}
module T10598_TH where
import Language.Haskell.TH
class C a
instance C Int
class C a => D a
instance D Int
{-
newtype Foo = MkFoo Int
deriving stock Eq
deriving anyclass C
deriving newtype Read
deriving stock instance Ord Foo
deriving anyclass instance D Foo
deriving newtype instance Show Foo
-}
$(do fooDataName <- newName "Foo"
mkFooConName <- newName "MkFoo"
let fooType = conT fooDataName
sequence [ newtypeD (cxt []) fooDataName [] Nothing
(normalC mkFooConName
[ bangType (bang noSourceUnpackedness noSourceStrictness)
[t| Int |] ])
[ derivClause (Just StockStrategy) [ [t| Eq |] ]
, derivClause (Just AnyclassStrategy) [ [t| C |] ]
, derivClause (Just NewtypeStrategy) [ [t| Read |] ] ]
, standaloneDerivWithStrategyD (Just StockStrategy)
(cxt []) [t| Ord $(fooType) |]
, standaloneDerivWithStrategyD (Just AnyclassStrategy)
(cxt []) [t| D $(fooType) |]
, standaloneDerivWithStrategyD (Just NewtypeStrategy)
(cxt []) [t| Show $(fooType) |] ])
|