module Hint.Type(
DeclHint, ModuHint, CrossHint, Hint(..),
module Export
) where
import Data.Semigroup
import Config.Type
import HSE.All as Export
import Idea as Export
import Prelude
import Refact as Export
type DeclHint = Scope -> Module_ -> Decl_ -> [Idea]
type ModuHint = Scope -> Module_ -> [Idea]
type CrossHint = [(Scope, Module_)] -> [Idea]
data Hint = Hint
{Hint -> [Setting] -> [(Scope, Module SrcSpanInfo)] -> [Idea]
hintModules :: [Setting] -> [(Scope, Module SrcSpanInfo)] -> [Idea]
,Hint -> [Setting] -> Scope -> Module SrcSpanInfo -> [Idea]
hintModule :: [Setting] -> Scope -> Module SrcSpanInfo -> [Idea]
,Hint
-> [Setting]
-> Scope
-> Module SrcSpanInfo
-> Decl SrcSpanInfo
-> [Idea]
hintDecl :: [Setting] -> Scope -> Module SrcSpanInfo -> Decl SrcSpanInfo -> [Idea]
, :: [Setting] -> Comment -> [Idea]
}
instance Semigroup Hint where
Hint x1 :: [Setting] -> [(Scope, Module SrcSpanInfo)] -> [Idea]
x1 x2 :: [Setting] -> Scope -> Module SrcSpanInfo -> [Idea]
x2 x3 :: [Setting]
-> Scope -> Module SrcSpanInfo -> Decl SrcSpanInfo -> [Idea]
x3 x4 :: [Setting] -> Comment -> [Idea]
x4 <> :: Hint -> Hint -> Hint
<> Hint y1 :: [Setting] -> [(Scope, Module SrcSpanInfo)] -> [Idea]
y1 y2 :: [Setting] -> Scope -> Module SrcSpanInfo -> [Idea]
y2 y3 :: [Setting]
-> Scope -> Module SrcSpanInfo -> Decl SrcSpanInfo -> [Idea]
y3 y4 :: [Setting] -> Comment -> [Idea]
y4 = ([Setting] -> [(Scope, Module SrcSpanInfo)] -> [Idea])
-> ([Setting] -> Scope -> Module SrcSpanInfo -> [Idea])
-> ([Setting]
-> Scope -> Module SrcSpanInfo -> Decl SrcSpanInfo -> [Idea])
-> ([Setting] -> Comment -> [Idea])
-> Hint
Hint
(\a :: [Setting]
a b :: [(Scope, Module SrcSpanInfo)]
b -> [Setting] -> [(Scope, Module SrcSpanInfo)] -> [Idea]
x1 [Setting]
a [(Scope, Module SrcSpanInfo)]
b [Idea] -> [Idea] -> [Idea]
forall a. [a] -> [a] -> [a]
++ [Setting] -> [(Scope, Module SrcSpanInfo)] -> [Idea]
y1 [Setting]
a [(Scope, Module SrcSpanInfo)]
b)
(\a :: [Setting]
a b :: Scope
b c :: Module SrcSpanInfo
c -> [Setting] -> Scope -> Module SrcSpanInfo -> [Idea]
x2 [Setting]
a Scope
b Module SrcSpanInfo
c [Idea] -> [Idea] -> [Idea]
forall a. [a] -> [a] -> [a]
++ [Setting] -> Scope -> Module SrcSpanInfo -> [Idea]
y2 [Setting]
a Scope
b Module SrcSpanInfo
c)
(\a :: [Setting]
a b :: Scope
b c :: Module SrcSpanInfo
c d :: Decl SrcSpanInfo
d -> [Setting]
-> Scope -> Module SrcSpanInfo -> Decl SrcSpanInfo -> [Idea]
x3 [Setting]
a Scope
b Module SrcSpanInfo
c Decl SrcSpanInfo
d [Idea] -> [Idea] -> [Idea]
forall a. [a] -> [a] -> [a]
++ [Setting]
-> Scope -> Module SrcSpanInfo -> Decl SrcSpanInfo -> [Idea]
y3 [Setting]
a Scope
b Module SrcSpanInfo
c Decl SrcSpanInfo
d)
(\a :: [Setting]
a b :: Comment
b -> [Setting] -> Comment -> [Idea]
x4 [Setting]
a Comment
b [Idea] -> [Idea] -> [Idea]
forall a. [a] -> [a] -> [a]
++ [Setting] -> Comment -> [Idea]
y4 [Setting]
a Comment
b)
instance Monoid Hint where
mempty :: Hint
mempty = ([Setting] -> [(Scope, Module SrcSpanInfo)] -> [Idea])
-> ([Setting] -> Scope -> Module SrcSpanInfo -> [Idea])
-> ([Setting]
-> Scope -> Module SrcSpanInfo -> Decl SrcSpanInfo -> [Idea])
-> ([Setting] -> Comment -> [Idea])
-> Hint
Hint (\_ _ -> []) (\_ _ _ -> []) (\_ _ _ _ -> []) (\_ _ -> [])
mappend :: Hint -> Hint -> Hint
mappend = Hint -> Hint -> Hint
forall a. Semigroup a => a -> a -> a
(<>)