{-# LANGUAGE PatternGuards, ViewPatterns, RecordWildCards #-}
{-# LANGUAGE OverloadedStrings #-}
{-# OPTIONS_GHC -O0 #-}
module Query(
Query(..), isQueryName, isQueryType, isQueryScope,
parseQuery, renderQuery,
query_test
) where
import Data.List
import Language.Haskell.Exts
import Data.Char
import Text.Blaze
import qualified Text.Blaze.XHtml5 as H
import Data.List.Extra
import Data.Generics.Uniplate.Data
import General.Util
import Data.Maybe
import Data.Monoid
import Control.Applicative
import Prelude
data Query
= QueryName {Query -> String
fromQueryName :: String}
| QueryType {Query -> Type ()
fromQueryType :: Type ()}
| QueryScope {Query -> Bool
scopeInclude :: Bool, Query -> String
scopeCategory :: String, Query -> String
scopeValue :: String}
| QueryNone String
deriving (Int -> Query -> ShowS
[Query] -> ShowS
Query -> String
(Int -> Query -> ShowS)
-> (Query -> String) -> ([Query] -> ShowS) -> Show Query
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Query] -> ShowS
$cshowList :: [Query] -> ShowS
show :: Query -> String
$cshow :: Query -> String
showsPrec :: Int -> Query -> ShowS
$cshowsPrec :: Int -> Query -> ShowS
Show,Query -> Query -> Bool
(Query -> Query -> Bool) -> (Query -> Query -> Bool) -> Eq Query
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Query -> Query -> Bool
$c/= :: Query -> Query -> Bool
== :: Query -> Query -> Bool
$c== :: Query -> Query -> Bool
Eq)
isQueryName, isQueryType, isQueryScope :: Query -> Bool
isQueryName :: Query -> Bool
isQueryName QueryName{} = Bool
True; isQueryName _ = Bool
False
isQueryType :: Query -> Bool
isQueryType QueryType{} = Bool
True; isQueryType _ = Bool
False
isQueryScope :: Query -> Bool
isQueryScope QueryScope{} = Bool
True; isQueryScope _ = Bool
False
renderQuery :: [Query] -> Markup
renderQuery :: [Query] -> Markup
renderQuery [] = Markup -> Markup
H.i "No query"
renderQuery xs :: [Query]
xs = do
String -> Markup
string (String -> Markup) -> String -> Markup
forall a b. (a -> b) -> a -> b
$ [String] -> String
unwords ([String] -> String) -> [String] -> String
forall a b. (a -> b) -> a -> b
$
[String
x | QueryName x :: String
x <- [Query]
xs] [String] -> [String] -> [String]
forall a. [a] -> [a] -> [a]
++
[":: " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Type () -> String
forall a. Pretty a => a -> String
pretty Type ()
x | QueryType x :: Type ()
x <- [Query]
xs] [String] -> [String] -> [String]
forall a. [a] -> [a] -> [a]
++
[['-' | Bool -> Bool
not Bool
scopeInclude] String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
scopeCategory String -> ShowS
forall a. [a] -> [a] -> [a]
++ ":" String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
scopeValue | QueryScope{..} <- [Query]
xs]
[Markup] -> Markup
forall a. Monoid a => [a] -> a
mconcat [" " Markup -> Markup -> Markup
forall a. Semigroup a => a -> a -> a
<> Markup -> Markup
H.del (String -> Markup
string String
x) | QueryNone x :: String
x <- [Query]
xs]
parseQuery :: String -> [Query]
parseQuery :: String -> [Query]
parseQuery x :: String
x = (String -> Query) -> [String] -> [Query]
forall a b. (a -> b) -> [a] -> [b]
map String -> Query
QueryName [String]
nam [Query] -> [Query] -> [Query]
forall a. [a] -> [a] -> [a]
++ (Type () -> Query) -> [Type ()] -> [Query]
forall a b. (a -> b) -> [a] -> [b]
map Type () -> Query
QueryType (Maybe (Type ()) -> [Type ()]
forall a. Maybe a -> [a]
maybeToList Maybe (Type ())
typ) [Query] -> [Query] -> [Query]
forall a. [a] -> [a] -> [a]
++ [Query]
scp
where
(scp :: [Query]
scp,rest :: [String]
rest) = [String] -> ([Query], [String])
scope_ ([String] -> ([Query], [String]))
-> [String] -> ([Query], [String])
forall a b. (a -> b) -> a -> b
$ String -> [String]
lexer String
x
(nam :: [String]
nam,typ :: Maybe (Type ())
typ) = [String] -> ([String], Maybe (Type ()))
divide [String]
rest
openBrackets :: [String]
openBrackets = ["(#","[:","(","["]
shutBrackets :: [String]
shutBrackets = ["#)",":]",")","]"]
isBracket :: String -> Bool
isBracket x :: String
x = String
x String -> [String] -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
`elem` ([String]
openBrackets [String] -> [String] -> [String]
forall a. [a] -> [a] -> [a]
++ [String]
shutBrackets)
isBracketPair :: String -> Bool
isBracketPair x :: String
x = String
x String -> [String] -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
`elem` (String -> ShowS) -> [String] -> [String] -> [String]
forall a b c. (a -> b -> c) -> [a] -> [b] -> [c]
zipWith String -> ShowS
forall a. [a] -> [a] -> [a]
(++) [String]
openBrackets [String]
shutBrackets
isSym :: Char -> Bool
isSym x :: Char
x = ((Char -> Bool
isSymbol Char
x Bool -> Bool -> Bool
|| Char -> Bool
isPunctuation Char
x) Bool -> Bool -> Bool
&& Char
x Char -> String -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
`notElem` String
special) Bool -> Bool -> Bool
|| Char
x Char -> String -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
`elem` String
ascSymbol
where special :: String
special = "(),;[]`{}\"'" :: String
ascSymbol :: String
ascSymbol = "!#$%&*+./<=>?@\\^|-~" :: String
isSyms :: String -> Bool
isSyms xs :: String
xs | String -> Bool
isBracket String
xs Bool -> Bool -> Bool
|| String -> Bool
isBracketPair String
xs = Bool
False
isSyms (x:xs) = Char -> Bool
isSym Char
x
isSyms [] = Bool
False
lexer :: String -> [String]
lexer :: String -> [String]
lexer ('(':',':xs :: String
xs) | (a :: String
a,')':b :: String
b) <- (Char -> Bool) -> String -> (String, String)
forall a. (a -> Bool) -> [a] -> ([a], [a])
span (Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== ',') String
xs = ("(," String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
a String -> ShowS
forall a. [a] -> [a] -> [a]
++ ")") String -> [String] -> [String]
forall a. a -> [a] -> [a]
: String -> [String]
lexer String
b
lexer x :: String
x | Just s :: String
s <- ([String]
bs [String] -> Int -> String
forall a. [a] -> Int -> a
!!) (Int -> String) -> Maybe Int -> Maybe String
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (String -> Bool) -> [String] -> Maybe Int
forall a. (a -> Bool) -> [a] -> Maybe Int
findIndex (String -> String -> Bool
forall a. Eq a => [a] -> [a] -> Bool
`isPrefixOf` String
x) [String]
bs = String
s String -> [String] -> [String]
forall a. a -> [a] -> [a]
: String -> [String]
lexer (Int -> ShowS
forall a. Int -> [a] -> [a]
drop (String -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length String
s) String
x)
where bs :: [String]
bs = (String -> ShowS) -> [String] -> [String] -> [String]
forall a b c. (a -> b -> c) -> [a] -> [b] -> [c]
zipWith String -> ShowS
forall a. [a] -> [a] -> [a]
(++) [String]
openBrackets [String]
shutBrackets [String] -> [String] -> [String]
forall a. [a] -> [a] -> [a]
++ [String]
openBrackets [String] -> [String] -> [String]
forall a. [a] -> [a] -> [a]
++ [String]
shutBrackets
lexer (x :: Char
x:xs :: String
xs)
| Char -> Bool
isSpace Char
x = " " String -> [String] -> [String]
forall a. a -> [a] -> [a]
: String -> [String]
lexer (ShowS
trimStart String
xs)
| Char -> Bool
isAlpha Char
x Bool -> Bool -> Bool
|| Char
x Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== '_' =
let (a :: String
a,b :: String
b) = (Char -> Bool) -> String -> (String, String)
forall a. (a -> Bool) -> [a] -> ([a], [a])
span (\x :: Char
x -> Char -> Bool
isAlphaNum Char
x Bool -> Bool -> Bool
|| Char
x Char -> String -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
`elem` ("_'#-" :: String)) String
xs
(a1 :: String
a1,a2 :: String
a2) = (Char -> Bool) -> String -> (String, String)
forall a. (a -> Bool) -> [a] -> ([a], [a])
spanEnd (Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== '-') String
a
in (Char
xChar -> ShowS
forall a. a -> [a] -> [a]
:String
a1) String -> [String] -> [String]
forall a. a -> [a] -> [a]
: String -> [String]
lexer (String
a2 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
b)
| Char -> Bool
isSym Char
x = let (a :: String
a,b :: String
b) = (Char -> Bool) -> String -> (String, String)
forall a. (a -> Bool) -> [a] -> ([a], [a])
span Char -> Bool
isSym String
xs in (Char
xChar -> ShowS
forall a. a -> [a] -> [a]
:String
a) String -> [String] -> [String]
forall a. a -> [a] -> [a]
: String -> [String]
lexer String
b
| Char
x Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== ',' = "," String -> [String] -> [String]
forall a. a -> [a] -> [a]
: String -> [String]
lexer String
xs
| Bool
otherwise = String -> [String]
lexer String
xs
lexer [] = []
scope_ :: [String] -> ([Query], [String])
scope_ :: [String] -> ([Query], [String])
scope_ xs :: [String]
xs = case [String]
xs of
(String -> Maybe Bool
forall a. (Eq a, IsString a) => a -> Maybe Bool
readPM -> Just pm :: Bool
pm):(String -> Maybe String
readCat -> Just cat :: String
cat):":":([String] -> Maybe (String, [String])
readMod -> Just (mod :: String
mod,rest :: [String]
rest)) -> Bool -> String -> String -> [String] -> ([Query], [String])
add Bool
pm String
cat String
mod [String]
rest
(String -> Maybe Bool
forall a. (Eq a, IsString a) => a -> Maybe Bool
readPM -> Just pm :: Bool
pm):(String -> Maybe String
readCat -> Just cat :: String
cat):":-":([String] -> Maybe (String, [String])
readMod -> Just (mod :: String
mod,rest :: [String]
rest)) -> Bool -> String -> String -> [String] -> ([Query], [String])
add Bool
False String
cat String
mod [String]
rest
(String -> Maybe Bool
forall a. (Eq a, IsString a) => a -> Maybe Bool
readPM -> Just pm :: Bool
pm):([String] -> Maybe (String, [String])
readMod -> Just (mod :: String
mod,rest :: [String]
rest)) -> Bool -> String -> [String] -> ([Query], [String])
add_ Bool
pm String
mod [String]
rest
(String -> Maybe String
readCat -> Just cat :: String
cat):":":([String] -> Maybe (String, [String])
readMod -> Just (mod :: String
mod,rest :: [String]
rest)) -> Bool -> String -> String -> [String] -> ([Query], [String])
add Bool
True String
cat String
mod [String]
rest
(String -> Maybe String
readCat -> Just cat :: String
cat):":.":([String] -> Maybe (String, [String])
readMod -> Just (mod :: String
mod,rest :: [String]
rest)) -> Bool -> String -> String -> [String] -> ([Query], [String])
add Bool
True String
cat ('.'Char -> ShowS
forall a. a -> [a] -> [a]
:String
mod) [String]
rest
(String -> Maybe String
readCat -> Just cat :: String
cat):":-":([String] -> Maybe (String, [String])
readMod -> Just (mod :: String
mod,rest :: [String]
rest)) -> Bool -> String -> String -> [String] -> ([Query], [String])
add Bool
False String
cat String
mod [String]
rest
(String -> Maybe String
readCat -> Just cat :: String
cat):":-.":([String] -> Maybe (String, [String])
readMod -> Just (mod :: String
mod,rest :: [String]
rest)) -> Bool -> String -> String -> [String] -> ([Query], [String])
add Bool
False String
cat ('.'Char -> ShowS
forall a. a -> [a] -> [a]
:String
mod) [String]
rest
"(":([String] -> Maybe (String, [String])
readDots -> Just (scp :: String
scp,x :: String
x:")":rest :: [String]
rest)) -> [String] -> ([Query], [String]) -> ([Query], [String])
forall a a. [a] -> (a, [a]) -> (a, [a])
out ["(",String
x,")"] (([Query], [String]) -> ([Query], [String]))
-> ([Query], [String]) -> ([Query], [String])
forall a b. (a -> b) -> a -> b
$ Bool -> String -> [String] -> ([Query], [String])
add_ Bool
True String
scp [String]
rest
([String] -> Maybe (String, [String])
readDots -> Just (scp :: String
scp,rest :: [String]
rest)) -> Bool -> String -> [String] -> ([Query], [String])
add_ Bool
True String
scp [String]
rest
"(":".":([String] -> Maybe (String, [String])
readDots -> Just (scp :: String
scp,x :: String
x:")":rest :: [String]
rest)) -> [String] -> ([Query], [String]) -> ([Query], [String])
forall a a. [a] -> (a, [a]) -> (a, [a])
out ["(",String
x,")"] (([Query], [String]) -> ([Query], [String]))
-> ([Query], [String]) -> ([Query], [String])
forall a b. (a -> b) -> a -> b
$ Bool -> String -> [String] -> ([Query], [String])
add_ Bool
True ('.'Char -> ShowS
forall a. a -> [a] -> [a]
:String
scp) [String]
rest
".":([String] -> Maybe (String, [String])
readDots -> Just (scp :: String
scp,rest :: [String]
rest)) -> Bool -> String -> [String] -> ([Query], [String])
add_ Bool
True ('.'Char -> ShowS
forall a. a -> [a] -> [a]
:String
scp) [String]
rest
x :: String
x:xs :: [String]
xs -> [String] -> ([Query], [String]) -> ([Query], [String])
forall a a. [a] -> (a, [a]) -> (a, [a])
out [String
x] (([Query], [String]) -> ([Query], [String]))
-> ([Query], [String]) -> ([Query], [String])
forall a b. (a -> b) -> a -> b
$ [String] -> ([Query], [String])
scope_ [String]
xs
[] -> ([], [])
where
out :: [a] -> (a, [a]) -> (a, [a])
out xs :: [a]
xs (a :: a
a,b :: [a]
b) = (a
a,[a]
xs[a] -> [a] -> [a]
forall a. [a] -> [a] -> [a]
++[a]
b)
add :: Bool -> String -> String -> [String] -> ([Query], [String])
add a :: Bool
a b :: String
b c :: String
c rest :: [String]
rest = let (x :: [Query]
x,y :: [String]
y) = [String] -> ([Query], [String])
scope_ [String]
rest in (Bool -> String -> String -> Query
QueryScope Bool
a String
b String
c Query -> [Query] -> [Query]
forall a. a -> [a] -> [a]
: [Query]
x, [String]
y)
add_ :: Bool -> String -> [String] -> ([Query], [String])
add_ a :: Bool
a c :: String
c rest :: [String]
rest = Bool -> String -> String -> [String] -> ([Query], [String])
add Bool
a String
b String
c [String]
rest
where b :: String
b = if '.' Char -> String -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
`elem` String
c Bool -> Bool -> Bool
|| (Char -> Bool) -> String -> Bool
forall (t :: * -> *) a. Foldable t => (a -> Bool) -> t a -> Bool
any Char -> Bool
isUpper (Int -> ShowS
forall a. Int -> [a] -> [a]
take 1 String
c) then "module" else "package"
readPM :: a -> Maybe Bool
readPM x :: a
x = case a
x of "+" -> Bool -> Maybe Bool
forall a. a -> Maybe a
Just Bool
True; "-" -> Bool -> Maybe Bool
forall a. a -> Maybe a
Just Bool
False; _ -> Maybe Bool
forall a. Maybe a
Nothing
readCat :: String -> Maybe String
readCat x :: String
x | String -> Bool
isAlpha1 String
x = String -> Maybe String
forall a. a -> Maybe a
Just String
x
| Bool
otherwise = Maybe String
forall a. Maybe a
Nothing
readMod :: [String] -> Maybe (String, [String])
readMod (x :: String
x:xs :: [String]
xs) | String -> Bool
isAlpha1 String
x = (String, [String]) -> Maybe (String, [String])
forall a. a -> Maybe a
Just ((String, [String]) -> Maybe (String, [String]))
-> (String, [String]) -> Maybe (String, [String])
forall a b. (a -> b) -> a -> b
$ case [String]
xs of
".":ys :: [String]
ys | Just (a :: String
a,b :: [String]
b) <- [String] -> Maybe (String, [String])
readMod [String]
ys -> (String
x String -> ShowS
forall a. [a] -> [a] -> [a]
++ "." String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
a, [String]
b)
".":[] -> (String
x String -> ShowS
forall a. [a] -> [a] -> [a]
++ ".",[])
".":" ":ys :: [String]
ys -> (String
x String -> ShowS
forall a. [a] -> [a] -> [a]
++ "."," "String -> [String] -> [String]
forall a. a -> [a] -> [a]
:[String]
ys)
_ -> (String
x,[String]
xs)
readMod _ = Maybe (String, [String])
forall a. Maybe a
Nothing
readDots :: [String] -> Maybe (String, [String])
readDots (x :: String
x:xs :: [String]
xs) | String -> Bool
isAlpha1 String
x = case [String]
xs of
".":ys :: [String]
ys | Just (a :: String
a,b :: [String]
b) <- [String] -> Maybe (String, [String])
readDots [String]
ys -> (String, [String]) -> Maybe (String, [String])
forall a. a -> Maybe a
Just (String
x String -> ShowS
forall a. [a] -> [a] -> [a]
++ "." String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
a, [String]
b)
('.':y :: String
y):ys :: [String]
ys -> (String, [String]) -> Maybe (String, [String])
forall a. a -> Maybe a
Just (String
x, [String
y | String
y String -> String -> Bool
forall a. Eq a => a -> a -> Bool
/= ""] [String] -> [String] -> [String]
forall a. [a] -> [a] -> [a]
++ [String]
ys)
_ -> Maybe (String, [String])
forall a. Maybe a
Nothing
readDots _ = Maybe (String, [String])
forall a. Maybe a
Nothing
divide :: [String] -> ([String], Maybe (Type ()))
divide :: [String] -> ([String], Maybe (Type ()))
divide xs :: [String]
xs | (String -> Bool) -> [String] -> Bool
forall (t :: * -> *) a. Foldable t => (a -> Bool) -> t a -> Bool
all String -> Bool
isAlpha1 [String]
ns = ([String]
ns, Maybe (Type ())
forall a. Maybe a
Nothing)
| (String -> Bool) -> [String] -> Bool
forall (t :: * -> *) a. Foldable t => (a -> Bool) -> t a -> Bool
all String -> Bool
isSyms [String]
ns = ([String]
ns, Maybe (Type ())
forall a. Maybe a
Nothing)
| [String] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [String]
ns Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== 1 = ([String]
ns, Maybe (Type ())
forall a. Maybe a
Nothing)
| Bool
otherwise = case (String -> Bool) -> [String] -> ([String], [String])
forall a. (a -> Bool) -> [a] -> ([a], [a])
break (String -> String -> Bool
forall a. Eq a => a -> a -> Bool
== "::") [String]
xs of
(nam :: [String]
nam, _:rest :: [String]
rest) -> ([String] -> [String]
names_ [String]
nam, [String] -> Maybe (Type ())
typeSig_ [String]
rest)
_ -> ([], [String] -> Maybe (Type ())
typeSig_ [String]
xs)
where ns :: [String]
ns = [String] -> [String]
names_ [String]
xs
names_ :: [String] -> [String]
names_ :: [String] -> [String]
names_ ("(":x :: String
x:")":xs :: [String]
xs) = [String
x | String
x String -> String -> Bool
forall a. Eq a => a -> a -> Bool
/= " "] [String] -> [String] -> [String]
forall a. [a] -> [a] -> [a]
++ [String] -> [String]
names_ [String]
xs
names_ ["(",x :: String
x] = [String
x]
names_ (x :: String
x:xs :: [String]
xs) = [String
x | String
x String -> String -> Bool
forall a. Eq a => a -> a -> Bool
/= " "] [String] -> [String] -> [String]
forall a. [a] -> [a] -> [a]
++ [String] -> [String]
names_ [String]
xs
names_ [] = []
typeSig_ :: [String] -> Maybe (Type ())
typeSig_ :: [String] -> Maybe (Type ())
typeSig_ xs :: [String]
xs = case ParseMode -> String -> ParseResult (Type SrcSpanInfo)
parseTypeWithMode ParseMode
parseMode (String -> ParseResult (Type SrcSpanInfo))
-> String -> ParseResult (Type SrcSpanInfo)
forall a b. (a -> b) -> a -> b
$ [String] -> String
unwords ([String] -> String) -> [String] -> String
forall a b. (a -> b) -> a -> b
$ [String] -> [String]
fixup ([String] -> [String]) -> [String] -> [String]
forall a b. (a -> b) -> a -> b
$ (String -> Bool) -> [String] -> [String]
forall a. (a -> Bool) -> [a] -> [a]
filter (Bool -> Bool
not (Bool -> Bool) -> (String -> Bool) -> String -> Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Char -> Bool) -> String -> Bool
forall (t :: * -> *) a. Foldable t => (a -> Bool) -> t a -> Bool
all Char -> Bool
isSpace) [String]
xs of
ParseOk x :: Type SrcSpanInfo
x -> Type () -> Maybe (Type ())
forall a. a -> Maybe a
Just (Type () -> Maybe (Type ())) -> Type () -> Maybe (Type ())
forall a b. (a -> b) -> a -> b
$ (Name () -> Name ()) -> Type () -> Type ()
forall from to. Biplate from to => (to -> to) -> from -> from
transformBi (\v :: Name ()
v -> if Name ()
v Name () -> Name () -> Bool
forall a. Eq a => a -> a -> Bool
== () -> String -> Name ()
forall l. l -> String -> Name l
Ident () "__" then () -> String -> Name ()
forall l. l -> String -> Name l
Ident () "_" else Name ()
v) (Type () -> Type ()) -> Type () -> Type ()
forall a b. (a -> b) -> a -> b
$ (SrcSpanInfo -> ()) -> Type SrcSpanInfo -> Type ()
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (() -> SrcSpanInfo -> ()
forall a b. a -> b -> a
const ()) Type SrcSpanInfo
x
_ -> Maybe (Type ())
forall a. Maybe a
Nothing
where
fixup :: [String] -> [String]
fixup = [String] -> [String]
underscore ([String] -> [String])
-> ([String] -> [String]) -> [String] -> [String]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [String] -> [String]
closeBracket ([String] -> [String])
-> ([String] -> [String]) -> [String] -> [String]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [String] -> [String]
forall a. (Eq a, IsString a) => [a] -> [a]
completeFunc ([String] -> [String])
-> ([String] -> [String]) -> [String] -> [String]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [String] -> [String]
completeArrow
completeArrow :: [String] -> [String]
completeArrow ([String] -> Maybe ([String], String)
forall a. [a] -> Maybe ([a], a)
unsnoc -> Just (a :: [String]
a,b :: String
b)) | String
b String -> [String] -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
`elem` ["-","="] = [String] -> String -> [String]
forall a. [a] -> a -> [a]
snoc [String]
a (String
b String -> ShowS
forall a. [a] -> [a] -> [a]
++ ">")
completeArrow x :: [String]
x = [String]
x
completeFunc :: [a] -> [a]
completeFunc ([a] -> Maybe ([a], a)
forall a. [a] -> Maybe ([a], a)
unsnoc -> Just (a :: [a]
a,b :: a
b)) | a
b a -> [a] -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
`elem` ["->","=>"] = [a]
a [a] -> [a] -> [a]
forall a. [a] -> [a] -> [a]
++ [a
b,"_"]
completeFunc x :: [a]
x = [a]
x
closeBracket :: [String] -> [String]
closeBracket xs :: [String]
xs = [String]
xs [String] -> [String] -> [String]
forall a. [a] -> [a] -> [a]
++ ([String] -> String -> [String])
-> [String] -> [String] -> [String]
forall (t :: * -> *) b a.
Foldable t =>
(b -> a -> b) -> b -> t a -> b
foldl [String] -> String -> [String]
f [] [String]
xs
where f :: [String] -> String -> [String]
f stack :: [String]
stack x :: String
x | Just c :: String
c <- String -> [(String, String)] -> Maybe String
forall a b. Eq a => a -> [(a, b)] -> Maybe b
lookup String
x ([String] -> [String] -> [(String, String)]
forall a b. [a] -> [b] -> [(a, b)]
zip [String]
openBrackets [String]
shutBrackets) = String
cString -> [String] -> [String]
forall a. a -> [a] -> [a]
:[String]
stack
f (s :: String
s:tack :: [String]
tack) x :: String
x | String
x String -> String -> Bool
forall a. Eq a => a -> a -> Bool
== String
s = [String]
tack
f stack :: [String]
stack x :: String
x = [String]
stack
underscore :: [String] -> [String]
underscore = [String] -> [String] -> [String] -> [String]
forall a. (Partial, Eq a) => [a] -> [a] -> [a] -> [a]
replace ["_"] ["__"]
query_test :: IO ()
query_test :: IO ()
query_test = String -> IO () -> IO ()
testing "Query.parseQuery" (IO () -> IO ()) -> IO () -> IO ()
forall a b. (a -> b) -> a -> b
$ do
let want :: String -> (a -> Bool) -> (a, [a]) -> ([String], [a])
want s :: String
s p :: a -> Bool
p (bad :: a
bad,q :: [a]
q) = (["missing " String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
s | Bool -> Bool
not (Bool -> Bool) -> Bool -> Bool
forall a b. (a -> b) -> a -> b
$ (a -> Bool) -> [a] -> Bool
forall (t :: * -> *) a. Foldable t => (a -> Bool) -> t a -> Bool
any a -> Bool
p [a]
q], (a -> Bool) -> [a] -> [a]
forall a. (a -> Bool) -> [a] -> [a]
filter (Bool -> Bool
not (Bool -> Bool) -> (a -> Bool) -> a -> Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> Bool
p) [a]
q)
wantEq :: a -> (a, [a]) -> ([String], [a])
wantEq v :: a
v = String -> (a -> Bool) -> (a, [a]) -> ([String], [a])
forall a a. String -> (a -> Bool) -> (a, [a]) -> ([String], [a])
want (a -> String
forall a. Show a => a -> String
show a
v) (a -> a -> Bool
forall a. Eq a => a -> a -> Bool
== a
v)
name :: String -> (a, [Query]) -> ([String], [Query])
name = Query -> (a, [Query]) -> ([String], [Query])
forall a a. (Show a, Eq a) => a -> (a, [a]) -> ([String], [a])
wantEq (Query -> (a, [Query]) -> ([String], [Query]))
-> (String -> Query)
-> String
-> (a, [Query])
-> ([String], [Query])
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> Query
QueryName
scope :: Bool -> String -> String -> (a, [Query]) -> ([String], [Query])
scope b :: Bool
b c :: String
c v :: String
v = Query -> (a, [Query]) -> ([String], [Query])
forall a a. (Show a, Eq a) => a -> (a, [a]) -> ([String], [a])
wantEq (Query -> (a, [Query]) -> ([String], [Query]))
-> Query -> (a, [Query]) -> ([String], [Query])
forall a b. (a -> b) -> a -> b
$ Bool -> String -> String -> Query
QueryScope Bool
b String
c String
v
typ :: String -> (a, [Query]) -> ([String], [Query])
typ = Query -> (a, [Query]) -> ([String], [Query])
forall a a. (Show a, Eq a) => a -> (a, [a]) -> ([String], [a])
wantEq (Query -> (a, [Query]) -> ([String], [Query]))
-> (String -> Query)
-> String
-> (a, [Query])
-> ([String], [Query])
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Type () -> Query
QueryType (Type () -> Query) -> (String -> Type ()) -> String -> Query
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (SrcSpanInfo -> ()) -> Type SrcSpanInfo -> Type ()
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (() -> SrcSpanInfo -> ()
forall a b. a -> b -> a
const ()) (Type SrcSpanInfo -> Type ())
-> (String -> Type SrcSpanInfo) -> String -> Type ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ParseResult (Type SrcSpanInfo) -> Type SrcSpanInfo
forall a. ParseResult a -> a
fromParseResult (ParseResult (Type SrcSpanInfo) -> Type SrcSpanInfo)
-> (String -> ParseResult (Type SrcSpanInfo))
-> String
-> Type SrcSpanInfo
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ParseMode -> String -> ParseResult (Type SrcSpanInfo)
parseTypeWithMode ParseMode
parseMode
typpp :: String -> (a, [Query]) -> ([String], [Query])
typpp x :: String
x = String -> (Query -> Bool) -> (a, [Query]) -> ([String], [Query])
forall a a. String -> (a -> Bool) -> (a, [a]) -> ([String], [a])
want ("type " String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
x) (\v :: Query
v -> case Query
v of QueryType s :: Type ()
s -> Type () -> String
forall a. Pretty a => a -> String
pretty Type ()
s String -> String -> Bool
forall a. Eq a => a -> a -> Bool
== String
x; _ -> Bool
False)
let infixl 0 ===
a :: String
a === :: String -> (([a], [Query]) -> ([String], b)) -> IO ()
=== f :: ([a], [Query]) -> ([String], b)
f | bad :: [String]
bad@(_:_) <- ([String], b) -> [String]
forall a b. (a, b) -> a
fst (([String], b) -> [String]) -> ([String], b) -> [String]
forall a b. (a -> b) -> a -> b
$ ([a], [Query]) -> ([String], b)
f ([], [Query]
q) = String -> IO ()
forall a. Partial => String -> a
error (String -> IO ()) -> String -> IO ()
forall a b. (a -> b) -> a -> b
$ (String, [Query], [String]) -> String
forall a. Show a => a -> String
show (String
a,[Query]
q,[String]
bad :: [String])
| Bool
otherwise = Char -> IO ()
putChar '.'
where q :: [Query]
q = String -> [Query]
parseQuery String
a
"" String -> (([String], [Query]) -> ([String], [Query])) -> IO ()
forall a b. String -> (([a], [Query]) -> ([String], b)) -> IO ()
=== ([String], [Query]) -> ([String], [Query])
forall a. a -> a
id
"map" String -> (([Any], [Query]) -> ([String], [Query])) -> IO ()
forall a b. String -> (([a], [Query]) -> ([String], b)) -> IO ()
=== String -> ([Any], [Query]) -> ([String], [Query])
forall a. String -> (a, [Query]) -> ([String], [Query])
name "map"
"#" String -> (([Any], [Query]) -> ([String], [Query])) -> IO ()
forall a b. String -> (([a], [Query]) -> ([String], b)) -> IO ()
=== String -> ([Any], [Query]) -> ([String], [Query])
forall a. String -> (a, [Query]) -> ([String], [Query])
name "#"
"c#" String -> (([Any], [Query]) -> ([String], [Query])) -> IO ()
forall a b. String -> (([a], [Query]) -> ([String], b)) -> IO ()
=== String -> ([Any], [Query]) -> ([String], [Query])
forall a. String -> (a, [Query]) -> ([String], [Query])
name "c#"
"-" String -> (([Any], [Query]) -> ([String], [Query])) -> IO ()
forall a b. String -> (([a], [Query]) -> ([String], b)) -> IO ()
=== String -> ([Any], [Query]) -> ([String], [Query])
forall a. String -> (a, [Query]) -> ([String], [Query])
name "-"
"/" String -> (([Any], [Query]) -> ([String], [Query])) -> IO ()
forall a b. String -> (([a], [Query]) -> ([String], b)) -> IO ()
=== String -> ([Any], [Query]) -> ([String], [Query])
forall a. String -> (a, [Query]) -> ([String], [Query])
name "/"
"->" String -> (([Any], [Query]) -> ([String], [Query])) -> IO ()
forall a b. String -> (([a], [Query]) -> ([String], b)) -> IO ()
=== String -> ([Any], [Query]) -> ([String], [Query])
forall a. String -> (a, [Query]) -> ([String], [Query])
name "->"
"foldl'" String -> (([Any], [Query]) -> ([String], [Query])) -> IO ()
forall a b. String -> (([a], [Query]) -> ([String], b)) -> IO ()
=== String -> ([Any], [Query]) -> ([String], [Query])
forall a. String -> (a, [Query]) -> ([String], [Query])
name "foldl'"
"fold'l" String -> (([Any], [Query]) -> ([String], [Query])) -> IO ()
forall a b. String -> (([a], [Query]) -> ([String], b)) -> IO ()
=== String -> ([Any], [Query]) -> ([String], [Query])
forall a. String -> (a, [Query]) -> ([String], [Query])
name "fold'l"
"Int#" String -> (([Any], [Query]) -> ([String], [Query])) -> IO ()
forall a b. String -> (([a], [Query]) -> ([String], b)) -> IO ()
=== String -> ([Any], [Query]) -> ([String], [Query])
forall a. String -> (a, [Query]) -> ([String], [Query])
name "Int#"
"concat map" String -> (([Any], [Query]) -> ([String], [Query])) -> IO ()
forall a b. String -> (([a], [Query]) -> ([String], b)) -> IO ()
=== String -> ([String], [Query]) -> ([String], [Query])
forall a. String -> (a, [Query]) -> ([String], [Query])
name "concat" (([String], [Query]) -> ([String], [Query]))
-> (([Any], [Query]) -> ([String], [Query]))
-> ([Any], [Query])
-> ([String], [Query])
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> ([Any], [Query]) -> ([String], [Query])
forall a. String -> (a, [Query]) -> ([String], [Query])
name "map"
"a -> b" String -> (([Any], [Query]) -> ([String], [Query])) -> IO ()
forall a b. String -> (([a], [Query]) -> ([String], b)) -> IO ()
=== String -> ([Any], [Query]) -> ([String], [Query])
forall a. String -> (a, [Query]) -> ([String], [Query])
typ "a -> b"
"a->b" String -> (([Any], [Query]) -> ([String], [Query])) -> IO ()
forall a b. String -> (([a], [Query]) -> ([String], b)) -> IO ()
=== String -> ([Any], [Query]) -> ([String], [Query])
forall a. String -> (a, [Query]) -> ([String], [Query])
typ "a -> b"
"(a b)" String -> (([Any], [Query]) -> ([String], [Query])) -> IO ()
forall a b. String -> (([a], [Query]) -> ([String], b)) -> IO ()
=== String -> ([Any], [Query]) -> ([String], [Query])
forall a. String -> (a, [Query]) -> ([String], [Query])
typ "(a b)"
"map :: a -> b" String -> (([Any], [Query]) -> ([String], [Query])) -> IO ()
forall a b. String -> (([a], [Query]) -> ([String], b)) -> IO ()
=== String -> ([Any], [Query]) -> ([String], [Query])
forall a. String -> (a, [Query]) -> ([String], [Query])
typ "a -> b"
"+Data.Map map" String -> (([Any], [Query]) -> ([String], [Query])) -> IO ()
forall a b. String -> (([a], [Query]) -> ([String], b)) -> IO ()
=== Bool
-> String -> String -> ([String], [Query]) -> ([String], [Query])
forall a.
Bool -> String -> String -> (a, [Query]) -> ([String], [Query])
scope Bool
True "module" "Data.Map" (([String], [Query]) -> ([String], [Query]))
-> (([Any], [Query]) -> ([String], [Query]))
-> ([Any], [Query])
-> ([String], [Query])
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> ([Any], [Query]) -> ([String], [Query])
forall a. String -> (a, [Query]) -> ([String], [Query])
name "map"
"a -> b package:foo" String -> (([Any], [Query]) -> ([String], [Query])) -> IO ()
forall a b. String -> (([a], [Query]) -> ([String], b)) -> IO ()
=== Bool
-> String -> String -> ([String], [Query]) -> ([String], [Query])
forall a.
Bool -> String -> String -> (a, [Query]) -> ([String], [Query])
scope Bool
True "package" "foo" (([String], [Query]) -> ([String], [Query]))
-> (([Any], [Query]) -> ([String], [Query]))
-> ([Any], [Query])
-> ([String], [Query])
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> ([Any], [Query]) -> ([String], [Query])
forall a. String -> (a, [Query]) -> ([String], [Query])
typ "a -> b"
"a -> b package:foo-bar" String -> (([Any], [Query]) -> ([String], [Query])) -> IO ()
forall a b. String -> (([a], [Query]) -> ([String], b)) -> IO ()
=== Bool
-> String -> String -> ([String], [Query]) -> ([String], [Query])
forall a.
Bool -> String -> String -> (a, [Query]) -> ([String], [Query])
scope Bool
True "package" "foo-bar" (([String], [Query]) -> ([String], [Query]))
-> (([Any], [Query]) -> ([String], [Query]))
-> ([Any], [Query])
-> ([String], [Query])
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> ([Any], [Query]) -> ([String], [Query])
forall a. String -> (a, [Query]) -> ([String], [Query])
typ "a -> b"
"Data.Map.map" String -> (([Any], [Query]) -> ([String], [Query])) -> IO ()
forall a b. String -> (([a], [Query]) -> ([String], b)) -> IO ()
=== Bool
-> String -> String -> ([String], [Query]) -> ([String], [Query])
forall a.
Bool -> String -> String -> (a, [Query]) -> ([String], [Query])
scope Bool
True "module" "Data.Map" (([String], [Query]) -> ([String], [Query]))
-> (([Any], [Query]) -> ([String], [Query]))
-> ([Any], [Query])
-> ([String], [Query])
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> ([Any], [Query]) -> ([String], [Query])
forall a. String -> (a, [Query]) -> ([String], [Query])
name "map"
"[a]" String -> (([Any], [Query]) -> ([String], [Query])) -> IO ()
forall a b. String -> (([a], [Query]) -> ([String], b)) -> IO ()
=== String -> ([Any], [Query]) -> ([String], [Query])
forall a. String -> (a, [Query]) -> ([String], [Query])
typ "[a]"
"++" String -> (([Any], [Query]) -> ([String], [Query])) -> IO ()
forall a b. String -> (([a], [Query]) -> ([String], b)) -> IO ()
=== String -> ([Any], [Query]) -> ([String], [Query])
forall a. String -> (a, [Query]) -> ([String], [Query])
name "++"
"(++)" String -> (([Any], [Query]) -> ([String], [Query])) -> IO ()
forall a b. String -> (([a], [Query]) -> ([String], b)) -> IO ()
=== String -> ([Any], [Query]) -> ([String], [Query])
forall a. String -> (a, [Query]) -> ([String], [Query])
name "++"
":+:" String -> (([Any], [Query]) -> ([String], [Query])) -> IO ()
forall a b. String -> (([a], [Query]) -> ([String], b)) -> IO ()
=== String -> ([Any], [Query]) -> ([String], [Query])
forall a. String -> (a, [Query]) -> ([String], [Query])
name ":+:"
"bytestring-cvs +hackage" String -> (([Any], [Query]) -> ([String], [Query])) -> IO ()
forall a b. String -> (([a], [Query]) -> ([String], b)) -> IO ()
=== Bool
-> String -> String -> ([String], [Query]) -> ([String], [Query])
forall a.
Bool -> String -> String -> (a, [Query]) -> ([String], [Query])
scope Bool
True "package" "hackage" (([String], [Query]) -> ([String], [Query]))
-> (([Any], [Query]) -> ([String], [Query]))
-> ([Any], [Query])
-> ([String], [Query])
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> ([Any], [Query]) -> ([String], [Query])
forall a. String -> (a, [Query]) -> ([String], [Query])
name "bytestring-cvs"
"m => c" String -> (([Any], [Query]) -> ([String], [Query])) -> IO ()
forall a b. String -> (([a], [Query]) -> ([String], b)) -> IO ()
=== String -> ([Any], [Query]) -> ([String], [Query])
forall a. String -> (a, [Query]) -> ([String], [Query])
typ "m => c"
"[b ()" String -> (([Any], [Query]) -> ([String], [Query])) -> IO ()
forall a b. String -> (([a], [Query]) -> ([String], b)) -> IO ()
=== String -> ([Any], [Query]) -> ([String], [Query])
forall a. String -> (a, [Query]) -> ([String], [Query])
typ "[b ()]"
"[b (" String -> (([Any], [Query]) -> ([String], [Query])) -> IO ()
forall a b. String -> (([a], [Query]) -> ([String], b)) -> IO ()
=== String -> ([Any], [Query]) -> ([String], [Query])
forall a. String -> (a, [Query]) -> ([String], [Query])
typ "[b ()]"
"_ -> a" String -> (([Any], [Query]) -> ([String], [Query])) -> IO ()
forall a b. String -> (([a], [Query]) -> ([String], b)) -> IO ()
=== String -> ([Any], [Query]) -> ([String], [Query])
forall a. String -> (a, [Query]) -> ([String], [Query])
typpp "_ -> a"
"(a -> b) ->" String -> (([Any], [Query]) -> ([String], [Query])) -> IO ()
forall a b. String -> (([a], [Query]) -> ([String], b)) -> IO ()
=== String -> ([Any], [Query]) -> ([String], [Query])
forall a. String -> (a, [Query]) -> ([String], [Query])
typpp "(a -> b) -> _"
"(a -> b) -" String -> (([Any], [Query]) -> ([String], [Query])) -> IO ()
forall a b. String -> (([a], [Query]) -> ([String], b)) -> IO ()
=== String -> ([Any], [Query]) -> ([String], [Query])
forall a. String -> (a, [Query]) -> ([String], [Query])
typpp "(a -> b) -> _"
"Monad m => " String -> (([Any], [Query]) -> ([String], [Query])) -> IO ()
forall a b. String -> (([a], [Query]) -> ([String], b)) -> IO ()
=== String -> ([Any], [Query]) -> ([String], [Query])
forall a. String -> (a, [Query]) -> ([String], [Query])
typpp "Monad m => _"
"map is:exact" String -> (([Any], [Query]) -> ([String], [Query])) -> IO ()
forall a b. String -> (([a], [Query]) -> ([String], b)) -> IO ()
=== String -> ([String], [Query]) -> ([String], [Query])
forall a. String -> (a, [Query]) -> ([String], [Query])
name "map" (([String], [Query]) -> ([String], [Query]))
-> (([Any], [Query]) -> ([String], [Query]))
-> ([Any], [Query])
-> ([String], [Query])
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Bool -> String -> String -> ([Any], [Query]) -> ([String], [Query])
forall a.
Bool -> String -> String -> (a, [Query]) -> ([String], [Query])
scope Bool
True "is" "exact"
"sort set:hackage" String -> (([Any], [Query]) -> ([String], [Query])) -> IO ()
forall a b. String -> (([a], [Query]) -> ([String], b)) -> IO ()
=== String -> ([String], [Query]) -> ([String], [Query])
forall a. String -> (a, [Query]) -> ([String], [Query])
name "sort" (([String], [Query]) -> ([String], [Query]))
-> (([Any], [Query]) -> ([String], [Query]))
-> ([Any], [Query])
-> ([String], [Query])
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Bool -> String -> String -> ([Any], [Query]) -> ([String], [Query])
forall a.
Bool -> String -> String -> (a, [Query]) -> ([String], [Query])
scope Bool
True "set" "hackage"
"sort -set:hackage" String -> (([Any], [Query]) -> ([String], [Query])) -> IO ()
forall a b. String -> (([a], [Query]) -> ([String], b)) -> IO ()
=== String -> ([String], [Query]) -> ([String], [Query])
forall a. String -> (a, [Query]) -> ([String], [Query])
name "sort" (([String], [Query]) -> ([String], [Query]))
-> (([Any], [Query]) -> ([String], [Query]))
-> ([Any], [Query])
-> ([String], [Query])
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Bool -> String -> String -> ([Any], [Query]) -> ([String], [Query])
forall a.
Bool -> String -> String -> (a, [Query]) -> ([String], [Query])
scope Bool
False "set" "hackage"
"sort set:-hackage" String -> (([Any], [Query]) -> ([String], [Query])) -> IO ()
forall a b. String -> (([a], [Query]) -> ([String], b)) -> IO ()
=== String -> ([String], [Query]) -> ([String], [Query])
forall a. String -> (a, [Query]) -> ([String], [Query])
name "sort" (([String], [Query]) -> ([String], [Query]))
-> (([Any], [Query]) -> ([String], [Query]))
-> ([Any], [Query])
-> ([String], [Query])
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Bool -> String -> String -> ([Any], [Query]) -> ([String], [Query])
forall a.
Bool -> String -> String -> (a, [Query]) -> ([String], [Query])
scope Bool
False "set" "hackage"
"sort -set:-hackage" String -> (([Any], [Query]) -> ([String], [Query])) -> IO ()
forall a b. String -> (([a], [Query]) -> ([String], b)) -> IO ()
=== String -> ([String], [Query]) -> ([String], [Query])
forall a. String -> (a, [Query]) -> ([String], [Query])
name "sort" (([String], [Query]) -> ([String], [Query]))
-> (([Any], [Query]) -> ([String], [Query]))
-> ([Any], [Query])
-> ([String], [Query])
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Bool -> String -> String -> ([Any], [Query]) -> ([String], [Query])
forall a.
Bool -> String -> String -> (a, [Query]) -> ([String], [Query])
scope Bool
False "set" "hackage"
"package:bytestring-csv" String -> (([Any], [Query]) -> ([String], [Query])) -> IO ()
forall a b. String -> (([a], [Query]) -> ([String], b)) -> IO ()
=== Bool -> String -> String -> ([Any], [Query]) -> ([String], [Query])
forall a.
Bool -> String -> String -> (a, [Query]) -> ([String], [Query])
scope Bool
True "package" "bytestring-csv"
"(>>=)" String -> (([Any], [Query]) -> ([String], [Query])) -> IO ()
forall a b. String -> (([a], [Query]) -> ([String], b)) -> IO ()
=== String -> ([Any], [Query]) -> ([String], [Query])
forall a. String -> (a, [Query]) -> ([String], [Query])
name ">>="
"(>>=" String -> (([Any], [Query]) -> ([String], [Query])) -> IO ()
forall a b. String -> (([a], [Query]) -> ([String], b)) -> IO ()
=== String -> ([Any], [Query]) -> ([String], [Query])
forall a. String -> (a, [Query]) -> ([String], [Query])
name ">>="
">>=" String -> (([Any], [Query]) -> ([String], [Query])) -> IO ()
forall a b. String -> (([a], [Query]) -> ([String], b)) -> IO ()
=== String -> ([Any], [Query]) -> ([String], [Query])
forall a. String -> (a, [Query]) -> ([String], [Query])
name ">>="
"Control.Monad.mplus" String -> (([Any], [Query]) -> ([String], [Query])) -> IO ()
forall a b. String -> (([a], [Query]) -> ([String], b)) -> IO ()
=== String -> ([String], [Query]) -> ([String], [Query])
forall a. String -> (a, [Query]) -> ([String], [Query])
name "mplus" (([String], [Query]) -> ([String], [Query]))
-> (([Any], [Query]) -> ([String], [Query]))
-> ([Any], [Query])
-> ([String], [Query])
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Bool -> String -> String -> ([Any], [Query]) -> ([String], [Query])
forall a.
Bool -> String -> String -> (a, [Query]) -> ([String], [Query])
scope Bool
True "module" "Control.Monad"
"Control.Monad.>>=" String -> (([Any], [Query]) -> ([String], [Query])) -> IO ()
forall a b. String -> (([a], [Query]) -> ([String], b)) -> IO ()
=== String -> ([String], [Query]) -> ([String], [Query])
forall a. String -> (a, [Query]) -> ([String], [Query])
name ">>=" (([String], [Query]) -> ([String], [Query]))
-> (([Any], [Query]) -> ([String], [Query]))
-> ([Any], [Query])
-> ([String], [Query])
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Bool -> String -> String -> ([Any], [Query]) -> ([String], [Query])
forall a.
Bool -> String -> String -> (a, [Query]) -> ([String], [Query])
scope Bool
True "module" "Control.Monad"
"Control.Monad.(>>=)" String -> (([Any], [Query]) -> ([String], [Query])) -> IO ()
forall a b. String -> (([a], [Query]) -> ([String], b)) -> IO ()
=== String -> ([String], [Query]) -> ([String], [Query])
forall a. String -> (a, [Query]) -> ([String], [Query])
name ">>=" (([String], [Query]) -> ([String], [Query]))
-> (([Any], [Query]) -> ([String], [Query]))
-> ([Any], [Query])
-> ([String], [Query])
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Bool -> String -> String -> ([Any], [Query]) -> ([String], [Query])
forall a.
Bool -> String -> String -> (a, [Query]) -> ([String], [Query])
scope Bool
True "module" "Control.Monad"
"(Control.Monad.>>=)" String -> (([Any], [Query]) -> ([String], [Query])) -> IO ()
forall a b. String -> (([a], [Query]) -> ([String], b)) -> IO ()
=== String -> ([String], [Query]) -> ([String], [Query])
forall a. String -> (a, [Query]) -> ([String], [Query])
name ">>=" (([String], [Query]) -> ([String], [Query]))
-> (([Any], [Query]) -> ([String], [Query]))
-> ([Any], [Query])
-> ([String], [Query])
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Bool -> String -> String -> ([Any], [Query]) -> ([String], [Query])
forall a.
Bool -> String -> String -> (a, [Query]) -> ([String], [Query])
scope Bool
True "module" "Control.Monad"
"Control.Monad.(>>=" String -> (([Any], [Query]) -> ([String], [Query])) -> IO ()
forall a b. String -> (([a], [Query]) -> ([String], b)) -> IO ()
=== String -> ([String], [Query]) -> ([String], [Query])
forall a. String -> (a, [Query]) -> ([String], [Query])
name ">>=" (([String], [Query]) -> ([String], [Query]))
-> (([Any], [Query]) -> ([String], [Query]))
-> ([Any], [Query])
-> ([String], [Query])
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Bool -> String -> String -> ([Any], [Query]) -> ([String], [Query])
forall a.
Bool -> String -> String -> (a, [Query]) -> ([String], [Query])
scope Bool
True "module" "Control.Monad"
"(Control.Monad.>>=" String -> (([Any], [Query]) -> ([String], [Query])) -> IO ()
forall a b. String -> (([a], [Query]) -> ([String], b)) -> IO ()
=== String -> ([String], [Query]) -> ([String], [Query])
forall a. String -> (a, [Query]) -> ([String], [Query])
name ">>=" (([String], [Query]) -> ([String], [Query]))
-> (([Any], [Query]) -> ([String], [Query]))
-> ([Any], [Query])
-> ([String], [Query])
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Bool -> String -> String -> ([Any], [Query]) -> ([String], [Query])
forall a.
Bool -> String -> String -> (a, [Query]) -> ([String], [Query])
scope Bool
True "module" "Control.Monad"
"foo.bar" String -> (([Any], [Query]) -> ([String], [Query])) -> IO ()
forall a b. String -> (([a], [Query]) -> ([String], b)) -> IO ()
=== String -> ([String], [Query]) -> ([String], [Query])
forall a. String -> (a, [Query]) -> ([String], [Query])
name "bar" (([String], [Query]) -> ([String], [Query]))
-> (([Any], [Query]) -> ([String], [Query]))
-> ([Any], [Query])
-> ([String], [Query])
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Bool -> String -> String -> ([Any], [Query]) -> ([String], [Query])
forall a.
Bool -> String -> String -> (a, [Query]) -> ([String], [Query])
scope Bool
True "package" "foo"
"insert module:.Map" String -> (([Any], [Query]) -> ([String], [Query])) -> IO ()
forall a b. String -> (([a], [Query]) -> ([String], b)) -> IO ()
=== String -> ([String], [Query]) -> ([String], [Query])
forall a. String -> (a, [Query]) -> ([String], [Query])
name "insert" (([String], [Query]) -> ([String], [Query]))
-> (([Any], [Query]) -> ([String], [Query]))
-> ([Any], [Query])
-> ([String], [Query])
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Bool -> String -> String -> ([Any], [Query]) -> ([String], [Query])
forall a.
Bool -> String -> String -> (a, [Query]) -> ([String], [Query])
scope Bool
True "module" ".Map"
"insert module:Map." String -> (([Any], [Query]) -> ([String], [Query])) -> IO ()
forall a b. String -> (([a], [Query]) -> ([String], b)) -> IO ()
=== String -> ([String], [Query]) -> ([String], [Query])
forall a. String -> (a, [Query]) -> ([String], [Query])
name "insert" (([String], [Query]) -> ([String], [Query]))
-> (([Any], [Query]) -> ([String], [Query]))
-> ([Any], [Query])
-> ([String], [Query])
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Bool -> String -> String -> ([Any], [Query]) -> ([String], [Query])
forall a.
Bool -> String -> String -> (a, [Query]) -> ([String], [Query])
scope Bool
True "module" "Map."
"insert module:.Map." String -> (([Any], [Query]) -> ([String], [Query])) -> IO ()
forall a b. String -> (([a], [Query]) -> ([String], b)) -> IO ()
=== String -> ([String], [Query]) -> ([String], [Query])
forall a. String -> (a, [Query]) -> ([String], [Query])
name "insert" (([String], [Query]) -> ([String], [Query]))
-> (([Any], [Query]) -> ([String], [Query]))
-> ([Any], [Query])
-> ([String], [Query])
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Bool -> String -> String -> ([Any], [Query]) -> ([String], [Query])
forall a.
Bool -> String -> String -> (a, [Query]) -> ([String], [Query])
scope Bool
True "module" ".Map."
".Map.insert" String -> (([Any], [Query]) -> ([String], [Query])) -> IO ()
forall a b. String -> (([a], [Query]) -> ([String], b)) -> IO ()
=== String -> ([String], [Query]) -> ([String], [Query])
forall a. String -> (a, [Query]) -> ([String], [Query])
name "insert" (([String], [Query]) -> ([String], [Query]))
-> (([Any], [Query]) -> ([String], [Query]))
-> ([Any], [Query])
-> ([String], [Query])
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Bool -> String -> String -> ([Any], [Query]) -> ([String], [Query])
forall a.
Bool -> String -> String -> (a, [Query]) -> ([String], [Query])
scope Bool
True "module" ".Map"
".Map." String -> (([Any], [Query]) -> ([String], [Query])) -> IO ()
forall a b. String -> (([a], [Query]) -> ([String], b)) -> IO ()
=== Bool -> String -> String -> ([Any], [Query]) -> ([String], [Query])
forall a.
Bool -> String -> String -> (a, [Query]) -> ([String], [Query])
scope Bool
True "module" ".Map"
"(.Monad.>>=" String -> (([Any], [Query]) -> ([String], [Query])) -> IO ()
forall a b. String -> (([a], [Query]) -> ([String], b)) -> IO ()
=== String -> ([String], [Query]) -> ([String], [Query])
forall a. String -> (a, [Query]) -> ([String], [Query])
name ">>=" (([String], [Query]) -> ([String], [Query]))
-> (([Any], [Query]) -> ([String], [Query]))
-> ([Any], [Query])
-> ([String], [Query])
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Bool -> String -> String -> ([Any], [Query]) -> ([String], [Query])
forall a.
Bool -> String -> String -> (a, [Query]) -> ([String], [Query])
scope Bool
True "module" ".Monad"
"author:Bryan-O'Sullivan" String -> (([Any], [Query]) -> ([String], [Query])) -> IO ()
forall a b. String -> (([a], [Query]) -> ([String], b)) -> IO ()
=== Bool -> String -> String -> ([Any], [Query]) -> ([String], [Query])
forall a.
Bool -> String -> String -> (a, [Query]) -> ([String], [Query])
scope Bool
True "author" "Bryan-O'Sullivan"
"\8801" String -> (([Any], [Query]) -> ([String], [Query])) -> IO ()
forall a b. String -> (([a], [Query]) -> ([String], b)) -> IO ()
=== String -> ([Any], [Query]) -> ([String], [Query])
forall a. String -> (a, [Query]) -> ([String], [Query])
name "\8801"
"( )" String -> (([String], [Query]) -> ([String], [Query])) -> IO ()
forall a b. String -> (([a], [Query]) -> ([String], b)) -> IO ()
=== ([String], [Query]) -> ([String], [Query])
forall a. a -> a
id