@@ -104,7 +104,7 @@ module Language.Haskell.Exts.Syntax (
104
104
export_name , safe_name , unsafe_name , interruptible_name , threadsafe_name ,
105
105
stdcall_name , ccall_name , cplusplus_name , dotnet_name , jvm_name , js_name ,
106
106
javascript_name , capi_name , forall_name , family_name , role_name , hole_name ,
107
- stock_name , anyclass_name ,
107
+ stock_name , anyclass_name , via_name ,
108
108
-- ** Type constructors
109
109
unit_tycon_name , fun_tycon_name , list_tycon_name , tuple_tycon_name , unboxed_singleton_tycon_name ,
110
110
unit_tycon , fun_tycon , list_tycon , tuple_tycon , unboxed_singleton_tycon ,
@@ -487,12 +487,13 @@ data Deriving l = Deriving l (Maybe (DerivStrategy l)) [InstRule l]
487
487
488
488
-- | Which technique the user explicitly requested when deriving an instance.
489
489
data DerivStrategy l
490
- = DerivStock l -- ^ GHC's \"standard\" strategy, which is to implement a
491
- -- custom instance for the data type. This only works for
492
- -- certain types that GHC knows about (e.g., 'Eq', 'Show',
493
- -- 'Functor' when @-XDeriveFunctor@ is enabled, etc.)
494
- | DerivAnyclass l -- ^ @-XDeriveAnyClass@
495
- | DerivNewtype l -- ^ @-XGeneralizedNewtypeDeriving@
490
+ = DerivStock l -- ^ GHC's \"standard\" strategy, which is to implement a
491
+ -- custom instance for the data type. This only works for
492
+ -- certain types that GHC knows about (e.g., 'Eq', 'Show',
493
+ -- 'Functor' when @-XDeriveFunctor@ is enabled, etc.)
494
+ | DerivAnyclass l -- ^ @-XDeriveAnyClass@
495
+ | DerivNewtype l -- ^ @-XGeneralizedNewtypeDeriving@
496
+ | DerivVia l (Type l ) -- ^ @-XDerivingVia@
496
497
deriving (Eq ,Ord ,Show ,Typeable ,Data ,Foldable ,Traversable ,Functor ,Generic )
497
498
498
499
-- | A binding group inside a @let@ or @where@ clause.
@@ -1052,7 +1053,7 @@ hole_name l = Special l (ExprHole l)
1052
1053
export_name, safe_name, unsafe_name, interruptible_name, threadsafe_name,
1053
1054
stdcall_name, ccall_name, cplusplus_name, dotnet_name,
1054
1055
jvm_name, js_name, javascript_name, capi_name, forall_name,
1055
- family_name , role_name , stock_name , anyclass_name :: l -> Name l
1056
+ family_name , role_name , stock_name , anyclass_name , via_name :: l -> Name l
1056
1057
export_name l = Ident l " export"
1057
1058
safe_name l = Ident l " safe"
1058
1059
unsafe_name l = Ident l " unsafe"
@@ -1071,6 +1072,7 @@ family_name l = Ident l "family"
1071
1072
role_name l = Ident l " role"
1072
1073
stock_name l = Ident l " stock"
1073
1074
anyclass_name l = Ident l " anyclass"
1075
+ via_name l = Ident l " via"
1074
1076
1075
1077
unit_tycon_name , fun_tycon_name , list_tycon_name , unboxed_singleton_tycon_name :: l -> QName l
1076
1078
unit_tycon_name l = unit_con_name l
@@ -1249,7 +1251,12 @@ instance Annotated DerivStrategy where
1249
1251
ann (DerivStock l) = l
1250
1252
ann (DerivAnyclass l) = l
1251
1253
ann (DerivNewtype l) = l
1252
- amap = fmap
1254
+ ann (DerivVia l _) = l
1255
+
1256
+ amap f (DerivStock l) = DerivStock (f l)
1257
+ amap f (DerivAnyclass l) = DerivAnyclass (f l)
1258
+ amap f (DerivNewtype l) = DerivNewtype (f l)
1259
+ amap f (DerivVia l t) = DerivVia (f l) t
1253
1260
1254
1261
instance Annotated TypeEqn where
1255
1262
ann (TypeEqn l _ _) = l
0 commit comments