blob: aab8bb3aa63b1b0ea39646bbee562ddd33b9e17b (
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 Stock) [ [t| Eq |] ]
, derivClause (Just Anyclass) [ [t| C |] ]
, derivClause (Just Newtype) [ [t| Read |] ] ]
, standaloneDerivWithStrategyD (Just Stock)
(cxt []) [t| Ord $(fooType) |]
, standaloneDerivWithStrategyD (Just Anyclass)
(cxt []) [t| D $(fooType) |]
, standaloneDerivWithStrategyD (Just Newtype)
(cxt []) [t| Show $(fooType) |] ])
|