@@ -10,6 +10,7 @@ module Ormolu.Printer.Meat.Declaration.Signature
1010 )
1111where
1212
13+import BasicTypes (Fixity (..))
1314import Control.Monad
1415import GHC
1516import Ormolu.Printer.Combinators
@@ -23,14 +24,13 @@ p_sigDecl = line . p_sigDecl'
2324p_sigDecl' :: Sig GhcPs -> R ()
2425p_sigDecl' = \case
2526 TypeSig NoExt names hswc -> p_typeSig names hswc
26− ClassOpSig NoExt def names hsib -> do
27− when def (txt "default ")
28− p_typeSig names HsWC {hswc_ext = NoExt, hswc_body = hsib}
27+ ClassOpSig NoExt def names hsib -> p_classOpSig def names hsib
28+ FixSig NoExt sig -> p_fixSig sig
2929 _ -> notImplemented "certain types of signature declarations"
3030
3131p_typeSig
32− :: [Located RdrName]
33− -> LHsSigWcType GhcPs
32+ :: [Located RdrName] -- ^ Names (before @::@)
33+ -> LHsSigWcType GhcPs -- ^ Type
3434 -> R ()
3535p_typeSig names HsWC {..} = do
3636 spaceSep p_rdrName names
@@ -39,3 +39,27 @@ p_typeSig names HsWC {..} = do
3939 txt ":: "
4040 located (hsib_body hswc_body) p_hsType
4141p_typeSig _ (XHsWildCardBndrs NoExt) = notImplemented "XHsWildCardBndrs"
42+
43+p_classOpSig
44+ :: Bool -- ^ Whether this is a \"default\" signature
45+ -> [Located RdrName] -- ^ Names (before @::@)
46+ -> HsImplicitBndrs GhcPs (LHsType GhcPs) -- ^ Type
47+ -> R ()
48+p_classOpSig def names hsib = do
49+ when def (txt "default ")
50+ p_typeSig names HsWC {hswc_ext = NoExt, hswc_body = hsib}
51+
52+p_fixSig
53+ :: FixitySig GhcPs
54+ -> R ()
55+p_fixSig = \case
56+ FixitySig NoExt names (Fixity _ n dir) -> do
57+ txt $ case dir of
58+ InfixL -> "infixl"
59+ InfixR -> "infixr"
60+ InfixN -> "infix"
61+ space
62+ atom n
63+ space
64+ sequence_ (withSep comma p_rdrName names)
65+ XFixitySig NoExt -> notImplemented "XFixitySig"