@@ -104,7 +104,7 @@ module Language.Haskell.Exts.Syntax (
104104 export_name , safe_name , unsafe_name , interruptible_name , threadsafe_name ,
105105 stdcall_name , ccall_name , cplusplus_name , dotnet_name , jvm_name , js_name ,
106106 javascript_name , capi_name , forall_name , family_name , role_name , hole_name ,
107- stock_name , anyclass_name ,
107+ stock_name , anyclass_name , via_name ,
108108 -- ** Type constructors
109109 unit_tycon_name , fun_tycon_name , list_tycon_name , tuple_tycon_name , unboxed_singleton_tycon_name ,
110110 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]
487487
488488-- | Which technique the user explicitly requested when deriving an instance.
489489data 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@
496497 deriving (Eq ,Ord ,Show ,Typeable ,Data ,Foldable ,Traversable ,Functor ,Generic )
497498
498499-- | A binding group inside a @let@ or @where@ clause.
@@ -1052,7 +1053,7 @@ hole_name l = Special l (ExprHole l)
10521053export_name, safe_name, unsafe_name, interruptible_name, threadsafe_name,
10531054 stdcall_name, ccall_name, cplusplus_name, dotnet_name,
10541055 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
10561057export_name l = Ident l " export"
10571058safe_name l = Ident l " safe"
10581059unsafe_name l = Ident l " unsafe"
@@ -1071,6 +1072,7 @@ family_name l = Ident l "family"
10711072role_name l = Ident l " role"
10721073stock_name l = Ident l " stock"
10731074anyclass_name l = Ident l " anyclass"
1075+ via_name l = Ident l " via"
10741076
10751077unit_tycon_name , fun_tycon_name , list_tycon_name , unboxed_singleton_tycon_name :: l -> QName l
10761078unit_tycon_name l = unit_con_name l
@@ -1249,7 +1251,12 @@ instance Annotated DerivStrategy where
12491251 ann (DerivStock l) = l
12501252 ann (DerivAnyclass l) = l
12511253 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
12531260
12541261instance Annotated TypeEqn where
12551262 ann (TypeEqn l _ _) = l
0 commit comments