= return (wrapperTy, deriveFoldable)
| classTy ≡ ''Collection
= return (wrapperTy, deriveCollection)
+ | classTy ≡ ''Set
+ = return (wrapperTy, deriveSet)
| classTy ≡ ''SortingCollection
= return (wrapperTy, deriveSortingCollection)
inspectInstance (AppT (AppT (AppT (ConT classTy) wrapperTy) _) _)
| otherwise
= fail $ "deriveMap: unknown method: " ⧺ pprint name
+deriveSet ∷ Q Cxt → Q Type → Q Exp → Q Exp → Q Dec
+deriveSet c ty _ _
+ = do names ← methodNames ''Set
+ instanceD c ty $ concatMap (pointfreeMethod exp) names
+ where
+ exp ∷ Name → Q Exp
+ exp name
+ | name ≡ 'haddock_candy
+ = [| haddock_candy |]
+ | otherwise
+ = fail $ "deriveSet: unknown method: " ⧺ pprint name
+
deriveSortingCollection ∷ Q Cxt → Q Type → Q Exp → Q Exp → Q Dec
deriveSortingCollection c ty wrap unwrap
= do names ← methodNames ''SortingCollection