{-# LANGUAGE DeriveFunctor #-}
{-# LANGUAGE CPP #-}
module Language.Haskell.Exts.ExactPrint
( exactPrint
, ExactP
) where
import Language.Haskell.Exts.Syntax
import Language.Haskell.Exts.SrcLoc
import Language.Haskell.Exts.Comments
import Control.Monad (when, liftM, ap, unless)
import qualified Control.Monad.Fail as Fail
#if __GLASGOW_HASKELL__ < 710
import Control.Applicative (Applicative(..))
#endif
import Control.Arrow ((***), (&&&))
import Prelude hiding (exp)
import Data.List (intersperse)
type Pos = (Int,Int)
pos :: (SrcInfo loc) => loc -> Pos
pos :: forall loc. SrcInfo loc => loc -> (Int, Int)
pos loc
ss = (loc -> Int
forall si. SrcInfo si => si -> Int
startLine loc
ss, loc -> Int
forall si. SrcInfo si => si -> Int
startColumn loc
ss)
newtype EP x = EP (Pos -> [Comment] -> (x, Pos, [Comment], ShowS))
instance Functor EP where
fmap :: forall a b. (a -> b) -> EP a -> EP b
fmap = (a -> b) -> EP a -> EP b
forall (m :: * -> *) a1 r. Monad m => (a1 -> r) -> m a1 -> m r
liftM
instance Applicative EP where
pure :: forall a. a -> EP a
pure = a -> EP a
forall a. a -> EP a
forall (m :: * -> *) a. Monad m => a -> m a
return
<*> :: forall a b. EP (a -> b) -> EP a -> EP b
(<*>) = EP (a -> b) -> EP a -> EP b
forall (m :: * -> *) a b. Monad m => m (a -> b) -> m a -> m b
ap
instance Monad EP where
return :: forall a. a -> EP a
return a
x = ((Int, Int) -> [Comment] -> (a, (Int, Int), [Comment], ShowS))
-> EP a
forall x.
((Int, Int) -> [Comment] -> (x, (Int, Int), [Comment], ShowS))
-> EP x
EP (((Int, Int) -> [Comment] -> (a, (Int, Int), [Comment], ShowS))
-> EP a)
-> ((Int, Int) -> [Comment] -> (a, (Int, Int), [Comment], ShowS))
-> EP a
forall a b. (a -> b) -> a -> b
$ \(Int, Int)
l [Comment]
cs -> (a
x, (Int, Int)
l, [Comment]
cs, ShowS
forall a. a -> a
id)
EP (Int, Int) -> [Comment] -> (a, (Int, Int), [Comment], ShowS)
m >>= :: forall a b. EP a -> (a -> EP b) -> EP b
>>= a -> EP b
k = ((Int, Int) -> [Comment] -> (b, (Int, Int), [Comment], ShowS))
-> EP b
forall x.
((Int, Int) -> [Comment] -> (x, (Int, Int), [Comment], ShowS))
-> EP x
EP (((Int, Int) -> [Comment] -> (b, (Int, Int), [Comment], ShowS))
-> EP b)
-> ((Int, Int) -> [Comment] -> (b, (Int, Int), [Comment], ShowS))
-> EP b
forall a b. (a -> b) -> a -> b
$ \(Int, Int)
l0 [Comment]
c0 -> let
(a
a, (Int, Int)
l1, [Comment]
c1, ShowS
s1) = (Int, Int) -> [Comment] -> (a, (Int, Int), [Comment], ShowS)
m (Int, Int)
l0 [Comment]
c0
EP (Int, Int) -> [Comment] -> (b, (Int, Int), [Comment], ShowS)
f = a -> EP b
k a
a
(b
b, (Int, Int)
l2, [Comment]
c2, ShowS
s2) = (Int, Int) -> [Comment] -> (b, (Int, Int), [Comment], ShowS)
f (Int, Int)
l1 [Comment]
c1
in (b
b, (Int, Int)
l2, [Comment]
c2, ShowS
s1 ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ShowS
s2)
instance Fail.MonadFail EP where
fail :: forall a. HasCallStack => [Char] -> EP a
fail = [Char] -> EP a
forall a. HasCallStack => [Char] -> a
error
runEP :: EP () -> [Comment] -> String
runEP :: EP () -> [Comment] -> [Char]
runEP (EP (Int, Int) -> [Comment] -> ((), (Int, Int), [Comment], ShowS)
f) [Comment]
cs = let (()
_,(Int, Int)
_,[Comment]
_,ShowS
s) = (Int, Int) -> [Comment] -> ((), (Int, Int), [Comment], ShowS)
f (Int
1,Int
1) [Comment]
cs in ShowS
s [Char]
""
getPos :: EP Pos
getPos :: EP (Int, Int)
getPos = ((Int, Int)
-> [Comment] -> ((Int, Int), (Int, Int), [Comment], ShowS))
-> EP (Int, Int)
forall x.
((Int, Int) -> [Comment] -> (x, (Int, Int), [Comment], ShowS))
-> EP x
EP (\(Int, Int)
l [Comment]
cs -> ((Int, Int)
l,(Int, Int)
l,[Comment]
cs,ShowS
forall a. a -> a
id))
setPos :: Pos -> EP ()
setPos :: (Int, Int) -> EP ()
setPos (Int, Int)
l = ((Int, Int) -> [Comment] -> ((), (Int, Int), [Comment], ShowS))
-> EP ()
forall x.
((Int, Int) -> [Comment] -> (x, (Int, Int), [Comment], ShowS))
-> EP x
EP (\(Int, Int)
_ [Comment]
cs -> ((),(Int, Int)
l,[Comment]
cs,ShowS
forall a. a -> a
id))
printString :: String -> EP ()
printString :: [Char] -> EP ()
printString [Char]
str =
((Int, Int) -> [Comment] -> ((), (Int, Int), [Comment], ShowS))
-> EP ()
forall x.
((Int, Int) -> [Comment] -> (x, (Int, Int), [Comment], ShowS))
-> EP x
EP (\(Int
l,Int
c) [Comment]
cs -> let (Int
l', Int
c') = ((Int, Int) -> Char -> (Int, Int))
-> (Int, Int) -> [Char] -> (Int, Int)
forall b a. (b -> a -> b) -> b -> [a] -> b
forall (t :: * -> *) b a.
Foldable t =>
(b -> a -> b) -> b -> t a -> b
foldl (Int, Int) -> Char -> (Int, Int)
forall {a} {b}. (Num a, Num b) => (a, b) -> Char -> (a, b)
go (Int
l, Int
c) [Char]
str
go :: (a, b) -> Char -> (a, b)
go (a
cl, b
_) Char
'\n' = (a
cl a -> a -> a
forall a. Num a => a -> a -> a
+ a
1, b
1)
go (a
cl, b
cc) Char
_ = (a
cl, b
cc b -> b -> b
forall a. Num a => a -> a -> a
+ b
1)
in ((), (Int
l', Int
c'), [Comment]
cs, [Char] -> ShowS
showString [Char]
str))
getComment :: EP (Maybe Comment)
= ((Int, Int)
-> [Comment] -> (Maybe Comment, (Int, Int), [Comment], ShowS))
-> EP (Maybe Comment)
forall x.
((Int, Int) -> [Comment] -> (x, (Int, Int), [Comment], ShowS))
-> EP x
EP (((Int, Int)
-> [Comment] -> (Maybe Comment, (Int, Int), [Comment], ShowS))
-> EP (Maybe Comment))
-> ((Int, Int)
-> [Comment] -> (Maybe Comment, (Int, Int), [Comment], ShowS))
-> EP (Maybe Comment)
forall a b. (a -> b) -> a -> b
$ \(Int, Int)
l [Comment]
cs ->
let x :: Maybe Comment
x = case [Comment]
cs of
Comment
c:[Comment]
_ -> Comment -> Maybe Comment
forall a. a -> Maybe a
Just Comment
c
[Comment]
_ -> Maybe Comment
forall a. Maybe a
Nothing
in (Maybe Comment
x, (Int, Int)
l, [Comment]
cs, ShowS
forall a. a -> a
id)
dropComment :: EP ()
= ((Int, Int) -> [Comment] -> ((), (Int, Int), [Comment], ShowS))
-> EP ()
forall x.
((Int, Int) -> [Comment] -> (x, (Int, Int), [Comment], ShowS))
-> EP x
EP (((Int, Int) -> [Comment] -> ((), (Int, Int), [Comment], ShowS))
-> EP ())
-> ((Int, Int) -> [Comment] -> ((), (Int, Int), [Comment], ShowS))
-> EP ()
forall a b. (a -> b) -> a -> b
$ \(Int, Int)
l [Comment]
cs ->
let cs' :: [Comment]
cs' = case [Comment]
cs of
(Comment
_:[Comment]
cs1) -> [Comment]
cs1
[Comment]
_ -> [Comment]
cs
in ((), (Int, Int)
l, [Comment]
cs', ShowS
forall a. a -> a
id)
newLine :: EP ()
newLine :: EP ()
newLine = do
(l,_) <- EP (Int, Int)
getPos
printString "\n"
setPos (l+1,1)
padUntil :: Pos -> EP ()
padUntil :: (Int, Int) -> EP ()
padUntil (Int
l,Int
c) = do
(l1,c1) <- EP (Int, Int)
getPos
case () of
()
_ | Int
l1 Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
>= Int
l Bool -> Bool -> Bool
&& Int
c1 Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<= Int
c -> [Char] -> EP ()
printString ([Char] -> EP ()) -> [Char] -> EP ()
forall a b. (a -> b) -> a -> b
$ Int -> Char -> [Char]
forall a. Int -> a -> [a]
replicate (Int
c Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
c1) Char
' '
| Int
l1 Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
< Int
l -> EP ()
newLine EP () -> EP () -> EP ()
forall a b. EP a -> EP b -> EP b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> (Int, Int) -> EP ()
padUntil (Int
l,Int
c)
| Bool
otherwise -> () -> EP ()
forall a. a -> EP a
forall (m :: * -> *) a. Monad m => a -> m a
return ()
mPrintComments :: Pos -> EP ()
(Int, Int)
p = do
mc <- EP (Maybe Comment)
getComment
case mc of
Maybe Comment
Nothing -> () -> EP ()
forall a. a -> EP a
forall (m :: * -> *) a. Monad m => a -> m a
return ()
Just (Comment Bool
multi SrcSpan
s [Char]
str) ->
Bool -> EP () -> EP ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
when (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
s (Int, Int) -> (Int, Int) -> Bool
forall a. Ord a => a -> a -> Bool
< (Int, Int)
p) (EP () -> EP ()) -> EP () -> EP ()
forall a b. (a -> b) -> a -> b
$ do
EP ()
dropComment
(Int, Int) -> EP ()
padUntil (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
s)
Bool -> [Char] -> EP ()
printComment Bool
multi [Char]
str
(Int, Int) -> EP ()
setPos (SrcSpan -> Int
srcSpanEndLine SrcSpan
s, SrcSpan -> Int
srcSpanEndColumn SrcSpan
s)
(Int, Int) -> EP ()
mPrintComments (Int, Int)
p
printComment :: Bool -> String -> EP ()
Bool
b [Char]
str
| Bool
b = [Char] -> EP ()
printString ([Char] -> EP ()) -> [Char] -> EP ()
forall a b. (a -> b) -> a -> b
$ [Char]
"{-" [Char] -> ShowS
forall a. [a] -> [a] -> [a]
++ [Char]
str [Char] -> ShowS
forall a. [a] -> [a] -> [a]
++ [Char]
"-}"
| Bool
otherwise = [Char] -> EP ()
printString ([Char] -> EP ()) -> [Char] -> EP ()
forall a b. (a -> b) -> a -> b
$ [Char]
"--" [Char] -> ShowS
forall a. [a] -> [a] -> [a]
++ [Char]
str
printWhitespace :: Pos -> EP ()
printWhitespace :: (Int, Int) -> EP ()
printWhitespace (Int, Int)
p = (Int, Int) -> EP ()
mPrintComments (Int, Int)
p EP () -> EP () -> EP ()
forall a b. EP a -> EP b -> EP b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> (Int, Int) -> EP ()
padUntil (Int, Int)
p
printStringAt :: Pos -> String -> EP ()
printStringAt :: (Int, Int) -> [Char] -> EP ()
printStringAt (Int, Int)
p [Char]
str = (Int, Int) -> EP ()
printWhitespace (Int, Int)
p EP () -> EP () -> EP ()
forall a b. EP a -> EP b -> EP b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> [Char] -> EP ()
printString [Char]
str
errorEP :: String -> EP a
errorEP :: forall a. [Char] -> EP a
errorEP = [Char] -> EP a
forall a. HasCallStack => [Char] -> EP a
forall (m :: * -> *) a.
(MonadFail m, HasCallStack) =>
[Char] -> m a
fail
exactPrint :: (ExactP ast) => ast SrcSpanInfo -> [Comment] -> String
exactPrint :: forall (ast :: * -> *).
ExactP ast =>
ast SrcSpanInfo -> [Comment] -> [Char]
exactPrint ast SrcSpanInfo
ast = EP () -> [Comment] -> [Char]
runEP (ast SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC ast SrcSpanInfo
ast)
exactPC :: (ExactP ast) => ast SrcSpanInfo -> EP ()
exactPC :: forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC ast SrcSpanInfo
ast = let p :: (Int, Int)
p = SrcSpanInfo -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos (ast SrcSpanInfo -> SrcSpanInfo
forall l. ast l -> l
forall (ast :: * -> *) l. Annotated ast => ast l -> l
ann ast SrcSpanInfo
ast) in (Int, Int) -> EP ()
mPrintComments (Int, Int)
p EP () -> EP () -> EP ()
forall a b. EP a -> EP b -> EP b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> (Int, Int) -> EP ()
padUntil (Int, Int)
p EP () -> EP () -> EP ()
forall a b. EP a -> EP b -> EP b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> ast SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactP ast SrcSpanInfo
ast
printSeq :: [(Pos, EP ())] -> EP ()
printSeq :: [((Int, Int), EP ())] -> EP ()
printSeq [] = () -> EP ()
forall a. a -> EP a
forall (m :: * -> *) a. Monad m => a -> m a
return ()
printSeq (((Int, Int)
p,EP ()
pr):[((Int, Int), EP ())]
xs) = (Int, Int) -> EP ()
printWhitespace (Int, Int)
p EP () -> EP () -> EP ()
forall a b. EP a -> EP b -> EP b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> EP ()
pr EP () -> EP () -> EP ()
forall a b. EP a -> EP b -> EP b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> [((Int, Int), EP ())] -> EP ()
printSeq [((Int, Int), EP ())]
xs
printStrs :: SrcInfo loc => [(loc, String)] -> EP ()
printStrs :: forall loc. SrcInfo loc => [(loc, [Char])] -> EP ()
printStrs = [((Int, Int), EP ())] -> EP ()
printSeq ([((Int, Int), EP ())] -> EP ())
-> ([(loc, [Char])] -> [((Int, Int), EP ())])
-> [(loc, [Char])]
-> EP ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((loc, [Char]) -> ((Int, Int), EP ()))
-> [(loc, [Char])] -> [((Int, Int), EP ())]
forall a b. (a -> b) -> [a] -> [b]
map (loc -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos (loc -> (Int, Int))
-> ([Char] -> EP ()) -> (loc, [Char]) -> ((Int, Int), EP ())
forall b c b' c'. (b -> c) -> (b' -> c') -> (b, b') -> (c, c')
forall (a :: * -> * -> *) b c b' c'.
Arrow a =>
a b c -> a b' c' -> a (b, b') (c, c')
*** [Char] -> EP ()
printString)
printPoints :: SrcSpanInfo -> [String] -> EP ()
printPoints :: SrcSpanInfo -> [[Char]] -> EP ()
printPoints SrcSpanInfo
l = [(SrcSpan, [Char])] -> EP ()
forall loc. SrcInfo loc => [(loc, [Char])] -> EP ()
printStrs ([(SrcSpan, [Char])] -> EP ())
-> ([[Char]] -> [(SrcSpan, [Char])]) -> [[Char]] -> EP ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [SrcSpan] -> [[Char]] -> [(SrcSpan, [Char])]
forall a b. [a] -> [b] -> [(a, b)]
zip (SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l)
printInterleaved, printInterleaved' :: (ExactP ast, SrcInfo loc) => [(loc, String)] -> [ast SrcSpanInfo] -> EP ()
printInterleaved :: forall (ast :: * -> *) loc.
(ExactP ast, SrcInfo loc) =>
[(loc, [Char])] -> [ast SrcSpanInfo] -> EP ()
printInterleaved [(loc, [Char])]
sistrs [ast SrcSpanInfo]
asts = [((Int, Int), EP ())] -> EP ()
printSeq ([((Int, Int), EP ())] -> EP ()) -> [((Int, Int), EP ())] -> EP ()
forall a b. (a -> b) -> a -> b
$
[((Int, Int), EP ())]
-> [((Int, Int), EP ())] -> [((Int, Int), EP ())]
forall a. [a] -> [a] -> [a]
interleave (((loc, [Char]) -> ((Int, Int), EP ()))
-> [(loc, [Char])] -> [((Int, Int), EP ())]
forall a b. (a -> b) -> [a] -> [b]
map (loc -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos (loc -> (Int, Int))
-> ([Char] -> EP ()) -> (loc, [Char]) -> ((Int, Int), EP ())
forall b c b' c'. (b -> c) -> (b' -> c') -> (b, b') -> (c, c')
forall (a :: * -> * -> *) b c b' c'.
Arrow a =>
a b c -> a b' c' -> a (b, b') (c, c')
*** [Char] -> EP ()
printString ) [(loc, [Char])]
sistrs)
((ast SrcSpanInfo -> ((Int, Int), EP ()))
-> [ast SrcSpanInfo] -> [((Int, Int), EP ())]
forall a b. (a -> b) -> [a] -> [b]
map (SrcSpanInfo -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos (SrcSpanInfo -> (Int, Int))
-> (ast SrcSpanInfo -> SrcSpanInfo)
-> ast SrcSpanInfo
-> (Int, Int)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ast SrcSpanInfo -> SrcSpanInfo
forall l. ast l -> l
forall (ast :: * -> *) l. Annotated ast => ast l -> l
ann (ast SrcSpanInfo -> (Int, Int))
-> (ast SrcSpanInfo -> EP ())
-> ast SrcSpanInfo
-> ((Int, Int), EP ())
forall b c c'. (b -> c) -> (b -> c') -> b -> (c, c')
forall (a :: * -> * -> *) b c c'.
Arrow a =>
a b c -> a b c' -> a b (c, c')
&&& ast SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactP) [ast SrcSpanInfo]
asts)
printInterleaved' :: forall (ast :: * -> *) loc.
(ExactP ast, SrcInfo loc) =>
[(loc, [Char])] -> [ast SrcSpanInfo] -> EP ()
printInterleaved' [(loc, [Char])]
sistrs (ast SrcSpanInfo
a:[ast SrcSpanInfo]
asts) = ast SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC ast SrcSpanInfo
a EP () -> EP () -> EP ()
forall a b. EP a -> EP b -> EP b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> [(loc, [Char])] -> [ast SrcSpanInfo] -> EP ()
forall (ast :: * -> *) loc.
(ExactP ast, SrcInfo loc) =>
[(loc, [Char])] -> [ast SrcSpanInfo] -> EP ()
printInterleaved [(loc, [Char])]
sistrs [ast SrcSpanInfo]
asts
printInterleaved' [(loc, [Char])]
_ [ast SrcSpanInfo]
_ = [Char] -> EP ()
forall a. [Char] -> a
internalError [Char]
"printInterleaved'"
printStreams :: [(Pos, EP ())] -> [(Pos, EP ())] -> EP ()
printStreams :: [((Int, Int), EP ())] -> [((Int, Int), EP ())] -> EP ()
printStreams [] [((Int, Int), EP ())]
ys = [((Int, Int), EP ())] -> EP ()
printSeq [((Int, Int), EP ())]
ys
printStreams [((Int, Int), EP ())]
xs [] = [((Int, Int), EP ())] -> EP ()
printSeq [((Int, Int), EP ())]
xs
printStreams (x :: ((Int, Int), EP ())
x@((Int, Int)
p1,EP ()
ep1):[((Int, Int), EP ())]
xs) (y :: ((Int, Int), EP ())
y@((Int, Int)
p2,EP ()
ep2):[((Int, Int), EP ())]
ys)
| (Int, Int)
p1 (Int, Int) -> (Int, Int) -> Bool
forall a. Ord a => a -> a -> Bool
<= (Int, Int)
p2 = (Int, Int) -> EP ()
printWhitespace (Int, Int)
p1 EP () -> EP () -> EP ()
forall a b. EP a -> EP b -> EP b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> EP ()
ep1 EP () -> EP () -> EP ()
forall a b. EP a -> EP b -> EP b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> [((Int, Int), EP ())] -> [((Int, Int), EP ())] -> EP ()
printStreams [((Int, Int), EP ())]
xs (((Int, Int), EP ())
y((Int, Int), EP ())
-> [((Int, Int), EP ())] -> [((Int, Int), EP ())]
forall a. a -> [a] -> [a]
:[((Int, Int), EP ())]
ys)
| Bool
otherwise = (Int, Int) -> EP ()
printWhitespace (Int, Int)
p2 EP () -> EP () -> EP ()
forall a b. EP a -> EP b -> EP b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> EP ()
ep2 EP () -> EP () -> EP ()
forall a b. EP a -> EP b -> EP b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> [((Int, Int), EP ())] -> [((Int, Int), EP ())] -> EP ()
printStreams (((Int, Int), EP ())
x((Int, Int), EP ())
-> [((Int, Int), EP ())] -> [((Int, Int), EP ())]
forall a. a -> [a] -> [a]
:[((Int, Int), EP ())]
xs) [((Int, Int), EP ())]
ys
interleave :: [a] -> [a] -> [a]
interleave :: forall a. [a] -> [a] -> [a]
interleave [] [a]
ys = [a]
ys
interleave [a]
xs [] = [a]
xs
interleave (a
x:[a]
xs) (a
y:[a]
ys) = a
xa -> [a] -> [a]
forall a. a -> [a] -> [a]
:a
ya -> [a] -> [a]
forall a. a -> [a] -> [a]
: [a] -> [a] -> [a]
forall a. [a] -> [a] -> [a]
interleave [a]
xs [a]
ys
maybeEP :: (a -> EP ()) -> Maybe a -> EP ()
maybeEP :: forall a. (a -> EP ()) -> Maybe a -> EP ()
maybeEP = EP () -> (a -> EP ()) -> Maybe a -> EP ()
forall b a. b -> (a -> b) -> Maybe a -> b
maybe (() -> EP ()
forall a. a -> EP a
forall (m :: * -> *) a. Monad m => a -> m a
return ())
bracketList :: (ExactP ast) => (String, String, String) -> [SrcSpan] -> [ast SrcSpanInfo] -> EP ()
bracketList :: forall (ast :: * -> *).
ExactP ast =>
([Char], [Char], [Char]) -> [SrcSpan] -> [ast SrcSpanInfo] -> EP ()
bracketList ([Char]
a,[Char]
b,[Char]
c) [SrcSpan]
poss [ast SrcSpanInfo]
asts = [(SrcSpan, [Char])] -> [ast SrcSpanInfo] -> EP ()
forall (ast :: * -> *) loc.
(ExactP ast, SrcInfo loc) =>
[(loc, [Char])] -> [ast SrcSpanInfo] -> EP ()
printInterleaved ([SrcSpan] -> ([Char], [Char], [Char]) -> [(SrcSpan, [Char])]
forall a b. [a] -> (b, b, b) -> [(a, b)]
pList [SrcSpan]
poss ([Char]
a,[Char]
b,[Char]
c)) [ast SrcSpanInfo]
asts
pList :: [a] -> (b, b, b) -> [(a, b)]
pList :: forall a b. [a] -> (b, b, b) -> [(a, b)]
pList (a
p:[a]
ps) (b
a,b
b,b
c) = (a
p,b
a) (a, b) -> [(a, b)] -> [(a, b)]
forall a. a -> [a] -> [a]
: [a] -> (b, b) -> [(a, b)]
forall a b. [a] -> (b, b) -> [(a, b)]
pList' [a]
ps (b
b,b
c)
pList [a]
_ (b, b, b)
_ = [Char] -> [(a, b)]
forall a. [Char] -> a
internalError [Char]
"pList"
pList' :: [a] -> (b, b) -> [(a, b)]
pList' :: forall a b. [a] -> (b, b) -> [(a, b)]
pList' [] (b, b)
_ = []
pList' [a
p] (b
_,b
c) = [(a
p,b
c)]
pList' (a
p:[a]
ps) (b
b,b
c) = (a
p, b
b) (a, b) -> [(a, b)] -> [(a, b)]
forall a. a -> [a] -> [a]
: [a] -> (b, b) -> [(a, b)]
forall a b. [a] -> (b, b) -> [(a, b)]
pList' [a]
ps (b
b,b
c)
parenList, squareList, squareColonList, curlyList, parenHashList,
unboxedSumTypeList :: (ExactP ast) => [SrcSpan] -> [ast SrcSpanInfo] -> EP ()
parenList :: forall (ast :: * -> *).
ExactP ast =>
[SrcSpan] -> [ast SrcSpanInfo] -> EP ()
parenList = ([Char], [Char], [Char]) -> [SrcSpan] -> [ast SrcSpanInfo] -> EP ()
forall (ast :: * -> *).
ExactP ast =>
([Char], [Char], [Char]) -> [SrcSpan] -> [ast SrcSpanInfo] -> EP ()
bracketList ([Char]
"(",[Char]
",",[Char]
")")
squareList :: forall (ast :: * -> *).
ExactP ast =>
[SrcSpan] -> [ast SrcSpanInfo] -> EP ()
squareList = ([Char], [Char], [Char]) -> [SrcSpan] -> [ast SrcSpanInfo] -> EP ()
forall (ast :: * -> *).
ExactP ast =>
([Char], [Char], [Char]) -> [SrcSpan] -> [ast SrcSpanInfo] -> EP ()
bracketList ([Char]
"[",[Char]
",",[Char]
"]")
squareColonList :: forall (ast :: * -> *).
ExactP ast =>
[SrcSpan] -> [ast SrcSpanInfo] -> EP ()
squareColonList = ([Char], [Char], [Char]) -> [SrcSpan] -> [ast SrcSpanInfo] -> EP ()
forall (ast :: * -> *).
ExactP ast =>
([Char], [Char], [Char]) -> [SrcSpan] -> [ast SrcSpanInfo] -> EP ()
bracketList ([Char]
"[:",[Char]
",",[Char]
":]")
curlyList :: forall (ast :: * -> *).
ExactP ast =>
[SrcSpan] -> [ast SrcSpanInfo] -> EP ()
curlyList = ([Char], [Char], [Char]) -> [SrcSpan] -> [ast SrcSpanInfo] -> EP ()
forall (ast :: * -> *).
ExactP ast =>
([Char], [Char], [Char]) -> [SrcSpan] -> [ast SrcSpanInfo] -> EP ()
bracketList ([Char]
"{",[Char]
",",[Char]
"}")
parenHashList :: forall (ast :: * -> *).
ExactP ast =>
[SrcSpan] -> [ast SrcSpanInfo] -> EP ()
parenHashList = ([Char], [Char], [Char]) -> [SrcSpan] -> [ast SrcSpanInfo] -> EP ()
forall (ast :: * -> *).
ExactP ast =>
([Char], [Char], [Char]) -> [SrcSpan] -> [ast SrcSpanInfo] -> EP ()
bracketList ([Char]
"(#",[Char]
",",[Char]
"#)")
unboxedSumTypeList :: forall (ast :: * -> *).
ExactP ast =>
[SrcSpan] -> [ast SrcSpanInfo] -> EP ()
unboxedSumTypeList = ([Char], [Char], [Char]) -> [SrcSpan] -> [ast SrcSpanInfo] -> EP ()
forall (ast :: * -> *).
ExactP ast =>
([Char], [Char], [Char]) -> [SrcSpan] -> [ast SrcSpanInfo] -> EP ()
bracketList ([Char]
"(#", [Char]
"|", [Char]
"#)")
layoutList :: (ExactP ast) => [SrcSpan] -> [ast SrcSpanInfo] -> EP ()
layoutList :: forall (ast :: * -> *).
ExactP ast =>
[SrcSpan] -> [ast SrcSpanInfo] -> EP ()
layoutList [SrcSpan]
poss [ast SrcSpanInfo]
asts = [((Int, Int), EP ())] -> [((Int, Int), EP ())] -> EP ()
printStreams
(((SrcSpan, [Char]) -> ((Int, Int), EP ()))
-> [(SrcSpan, [Char])] -> [((Int, Int), EP ())]
forall a b. (a -> b) -> [a] -> [b]
map (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos (SrcSpan -> (Int, Int))
-> ([Char] -> EP ()) -> (SrcSpan, [Char]) -> ((Int, Int), EP ())
forall b c b' c'. (b -> c) -> (b' -> c') -> (b, b') -> (c, c')
forall (a :: * -> * -> *) b c b' c'.
Arrow a =>
a b c -> a b' c' -> a (b, b') (c, c')
*** [Char] -> EP ()
printString) ([(SrcSpan, [Char])] -> [((Int, Int), EP ())])
-> [(SrcSpan, [Char])] -> [((Int, Int), EP ())]
forall a b. (a -> b) -> a -> b
$ [SrcSpan] -> [(SrcSpan, [Char])]
lList [SrcSpan]
poss)
((ast SrcSpanInfo -> ((Int, Int), EP ()))
-> [ast SrcSpanInfo] -> [((Int, Int), EP ())]
forall a b. (a -> b) -> [a] -> [b]
map (SrcSpanInfo -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos (SrcSpanInfo -> (Int, Int))
-> (ast SrcSpanInfo -> SrcSpanInfo)
-> ast SrcSpanInfo
-> (Int, Int)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ast SrcSpanInfo -> SrcSpanInfo
forall l. ast l -> l
forall (ast :: * -> *) l. Annotated ast => ast l -> l
ann (ast SrcSpanInfo -> (Int, Int))
-> (ast SrcSpanInfo -> EP ())
-> ast SrcSpanInfo
-> ((Int, Int), EP ())
forall b c c'. (b -> c) -> (b -> c') -> b -> (c, c')
forall (a :: * -> * -> *) b c c'.
Arrow a =>
a b c -> a b c' -> a b (c, c')
&&& ast SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactP) [ast SrcSpanInfo]
asts)
lList :: [SrcSpan] -> [(SrcSpan, String)]
lList :: [SrcSpan] -> [(SrcSpan, [Char])]
lList (SrcSpan
p:[SrcSpan]
ps) = (if SrcSpan -> Bool
isNullSpan SrcSpan
p then (SrcSpan
p,[Char]
"") else (SrcSpan
p,[Char]
"{")) (SrcSpan, [Char]) -> [(SrcSpan, [Char])] -> [(SrcSpan, [Char])]
forall a. a -> [a] -> [a]
: [SrcSpan] -> [(SrcSpan, [Char])]
lList' [SrcSpan]
ps
lList [SrcSpan]
_ = [Char] -> [(SrcSpan, [Char])]
forall a. [Char] -> a
internalError [Char]
"lList"
lList' :: [SrcSpan] -> [(SrcSpan, String)]
lList' :: [SrcSpan] -> [(SrcSpan, [Char])]
lList' [] = []
lList' [SrcSpan
p] = [if SrcSpan -> Bool
isNullSpan SrcSpan
p then (SrcSpan
p,[Char]
"") else (SrcSpan
p,[Char]
"}")]
lList' (SrcSpan
p:[SrcSpan]
ps) = (if SrcSpan -> Bool
isNullSpan SrcSpan
p then (SrcSpan
p,[Char]
"") else (SrcSpan
p,[Char]
";")) (SrcSpan, [Char]) -> [(SrcSpan, [Char])] -> [(SrcSpan, [Char])]
forall a. a -> [a] -> [a]
: [SrcSpan] -> [(SrcSpan, [Char])]
lList' [SrcSpan]
ps
printSemi :: SrcSpan -> EP ()
printSemi :: SrcSpan -> EP ()
printSemi SrcSpan
p = do
(Int, Int) -> EP ()
printWhitespace (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
p)
Bool -> EP () -> EP ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (SrcSpan -> Bool
isNullSpan SrcSpan
p) (EP () -> EP ()) -> EP () -> EP ()
forall a b. (a -> b) -> a -> b
$ [Char] -> EP ()
printString [Char]
";"
class Annotated ast => ExactP ast where
exactP :: ast SrcSpanInfo -> EP ()
instance ExactP Literal where
exactP :: Literal SrcSpanInfo -> EP ()
exactP Literal SrcSpanInfo
lit = case Literal SrcSpanInfo
lit of
Char SrcSpanInfo
_ Char
_ [Char]
rw -> [Char] -> EP ()
printString (Char
'\''Char -> ShowS
forall a. a -> [a] -> [a]
:[Char]
rw [Char] -> ShowS
forall a. [a] -> [a] -> [a]
++ [Char]
"\'")
String SrcSpanInfo
_ [Char]
_ [Char]
rw -> [Char] -> EP ()
printString (Char
'\"'Char -> ShowS
forall a. a -> [a] -> [a]
:[Char]
rw [Char] -> ShowS
forall a. [a] -> [a] -> [a]
++ [Char]
"\"")
Int SrcSpanInfo
_ Integer
_ [Char]
rw -> [Char] -> EP ()
printString [Char]
rw
Frac SrcSpanInfo
_ Rational
_ [Char]
rw -> [Char] -> EP ()
printString [Char]
rw
PrimInt SrcSpanInfo
_ Integer
_ [Char]
rw -> [Char] -> EP ()
printString ([Char]
rw [Char] -> ShowS
forall a. [a] -> [a] -> [a]
++ [Char]
"#" )
PrimWord SrcSpanInfo
_ Integer
_ [Char]
rw -> [Char] -> EP ()
printString ([Char]
rw [Char] -> ShowS
forall a. [a] -> [a] -> [a]
++ [Char]
"##")
PrimFloat SrcSpanInfo
_ Rational
_ [Char]
rw -> [Char] -> EP ()
printString ([Char]
rw [Char] -> ShowS
forall a. [a] -> [a] -> [a]
++ [Char]
"#" )
PrimDouble SrcSpanInfo
_ Rational
_ [Char]
rw -> [Char] -> EP ()
printString ([Char]
rw [Char] -> ShowS
forall a. [a] -> [a] -> [a]
++ [Char]
"##")
PrimChar SrcSpanInfo
_ Char
_ [Char]
rw -> [Char] -> EP ()
printString (Char
'\''Char -> ShowS
forall a. a -> [a] -> [a]
:[Char]
rw [Char] -> ShowS
forall a. [a] -> [a] -> [a]
++ [Char]
"\'#" )
PrimString SrcSpanInfo
_ [Char]
_ [Char]
rw -> [Char] -> EP ()
printString (Char
'\"'Char -> ShowS
forall a. a -> [a] -> [a]
:[Char]
rw [Char] -> ShowS
forall a. [a] -> [a] -> [a]
++ [Char]
"\"#" )
instance ExactP Sign where
exactP :: Sign SrcSpanInfo -> EP ()
exactP Sign SrcSpanInfo
sg = case Sign SrcSpanInfo
sg of
Signless SrcSpanInfo
_ -> () -> EP ()
forall a. a -> EP a
forall (m :: * -> *) a. Monad m => a -> m a
return ()
Negative SrcSpanInfo
l -> (Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpanInfo -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpanInfo
l) [Char]
"-"
instance ExactP ModuleName where
exactP :: ModuleName SrcSpanInfo -> EP ()
exactP (ModuleName SrcSpanInfo
_ [Char]
str) = [Char] -> EP ()
printString [Char]
str
instance ExactP SpecialCon where
exactP :: SpecialCon SrcSpanInfo -> EP ()
exactP SpecialCon SrcSpanInfo
sc = case SpecialCon SrcSpanInfo
sc of
UnitCon SrcSpanInfo
l -> SrcSpanInfo -> [[Char]] -> EP ()
printPoints SrcSpanInfo
l [[Char]
"(",[Char]
")"]
ListCon SrcSpanInfo
l -> SrcSpanInfo -> [[Char]] -> EP ()
printPoints SrcSpanInfo
l [[Char]
"[",[Char]
"]"]
FunCon SrcSpanInfo
l -> case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
[SrcSpan
_,SrcSpan
b,SrcSpan
_] -> (Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
b) [Char]
"->"
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: SpecialCon is given wrong number of srcInfoPoints"
TupleCon SrcSpanInfo
l Boxed
b Int
n -> SrcSpanInfo -> [[Char]] -> EP ()
printPoints SrcSpanInfo
l ([[Char]] -> EP ()) -> [[Char]] -> EP ()
forall a b. (a -> b) -> a -> b
$
case Boxed
b of
Boxed
Unboxed -> [Char]
"(#"[Char] -> [[Char]] -> [[Char]]
forall a. a -> [a] -> [a]
: Int -> [Char] -> [[Char]]
forall a. Int -> a -> [a]
replicate (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1) [Char]
"," [[Char]] -> [[Char]] -> [[Char]]
forall a. [a] -> [a] -> [a]
++ [[Char]
"#)"]
Boxed
_ -> [Char]
"(" [Char] -> [[Char]] -> [[Char]]
forall a. a -> [a] -> [a]
: Int -> [Char] -> [[Char]]
forall a. Int -> a -> [a]
replicate (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1) [Char]
"," [[Char]] -> [[Char]] -> [[Char]]
forall a. [a] -> [a] -> [a]
++ [[Char]
")"]
Cons SrcSpanInfo
_ -> [Char] -> EP ()
printString [Char]
":"
UnboxedSingleCon SrcSpanInfo
l -> SrcSpanInfo -> [[Char]] -> EP ()
printPoints SrcSpanInfo
l [[Char]
"(#",[Char]
"#)"]
ExprHole SrcSpanInfo
l -> (Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpanInfo -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpanInfo
l) [Char]
"_"
isSymbolName :: Name l -> Bool
isSymbolName :: forall l. Name l -> Bool
isSymbolName (Symbol l
_ [Char]
_) = Bool
True
isSymbolName Name l
_ = Bool
False
isSymbolQName :: QName l -> Bool
isSymbolQName :: forall l. QName l -> Bool
isSymbolQName (UnQual l
_ Name l
n) = Name l -> Bool
forall l. Name l -> Bool
isSymbolName Name l
n
isSymbolQName (Qual l
_ ModuleName l
_ Name l
n) = Name l -> Bool
forall l. Name l -> Bool
isSymbolName Name l
n
isSymbolQName (Special l
_ Cons{}) = Bool
True
isSymbolQName (Special l
_ FunCon{}) = Bool
True
isSymbolQName QName l
_ = Bool
False
instance ExactP QName where
exactP :: QName SrcSpanInfo -> EP ()
exactP QName SrcSpanInfo
qn
| QName SrcSpanInfo -> Bool
forall l. QName l -> Bool
isSymbolQName QName SrcSpanInfo
qn =
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints (QName SrcSpanInfo -> SrcSpanInfo
forall l. QName l -> l
forall (ast :: * -> *) l. Annotated ast => ast l -> l
ann QName SrcSpanInfo
qn) of
[SrcSpan
_,SrcSpan
b,SrcSpan
c] -> do
[Char] -> EP ()
printString [Char]
"("
(Int, Int) -> EP ()
printWhitespace (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
b)
QName SrcSpanInfo -> EP ()
epQName QName SrcSpanInfo
qn
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
c) [Char]
")"
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: QName is given wrong number of srcInfoPoints"
| Bool
otherwise = QName SrcSpanInfo -> EP ()
epQName QName SrcSpanInfo
qn
epQName :: QName SrcSpanInfo -> EP ()
epQName :: QName SrcSpanInfo -> EP ()
epQName QName SrcSpanInfo
qn = case QName SrcSpanInfo
qn of
Qual SrcSpanInfo
_ ModuleName SrcSpanInfo
mn Name SrcSpanInfo
n -> ModuleName SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactP ModuleName SrcSpanInfo
mn EP () -> EP () -> EP ()
forall a b. EP a -> EP b -> EP b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> [Char] -> EP ()
printString [Char]
"." EP () -> EP () -> EP ()
forall a b. EP a -> EP b -> EP b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> Name SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactP Name SrcSpanInfo
n
UnQual SrcSpanInfo
_ Name SrcSpanInfo
n -> Name SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactP Name SrcSpanInfo
n
Special SrcSpanInfo
_ SpecialCon SrcSpanInfo
sc -> SpecialCon SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactP SpecialCon SrcSpanInfo
sc
epInfixQName :: QName SrcSpanInfo -> EP ()
epInfixQName :: QName SrcSpanInfo -> EP ()
epInfixQName QName SrcSpanInfo
qn
| QName SrcSpanInfo -> Bool
forall l. QName l -> Bool
isSymbolQName QName SrcSpanInfo
qn = (Int, Int) -> EP ()
printWhitespace (SrcSpanInfo -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos (QName SrcSpanInfo -> SrcSpanInfo
forall l. QName l -> l
forall (ast :: * -> *) l. Annotated ast => ast l -> l
ann QName SrcSpanInfo
qn)) EP () -> EP () -> EP ()
forall a b. EP a -> EP b -> EP b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> QName SrcSpanInfo -> EP ()
epQName QName SrcSpanInfo
qn
| Bool
otherwise =
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints (QName SrcSpanInfo -> SrcSpanInfo
forall l. QName l -> l
forall (ast :: * -> *) l. Annotated ast => ast l -> l
ann QName SrcSpanInfo
qn) of
[SrcSpan
a,SrcSpan
b,SrcSpan
c] -> do
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
a) [Char]
"`"
(Int, Int) -> EP ()
printWhitespace (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
b)
QName SrcSpanInfo -> EP ()
epQName QName SrcSpanInfo
qn
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
c) [Char]
"`"
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: QName (epInfixName) is given wrong number of srcInfoPoints"
instance ExactP Name where
exactP :: Name SrcSpanInfo -> EP ()
exactP Name SrcSpanInfo
n = case Name SrcSpanInfo
n of
Ident SrcSpanInfo
_ [Char]
str -> [Char] -> EP ()
printString [Char]
str
Symbol SrcSpanInfo
l [Char]
str ->
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
[SrcSpan
_,SrcSpan
b,SrcSpan
c] -> do
[Char] -> EP ()
printString [Char]
"("
(Int, Int) -> EP ()
printWhitespace (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
b)
[Char] -> EP ()
printString [Char]
str
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
c) [Char]
")"
[] -> [Char] -> EP ()
printString [Char]
str
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: Name is given wrong number of srcInfoPoints"
epInfixName :: Name SrcSpanInfo -> EP ()
epInfixName :: Name SrcSpanInfo -> EP ()
epInfixName Name SrcSpanInfo
n
| Name SrcSpanInfo -> Bool
forall l. Name l -> Bool
isSymbolName Name SrcSpanInfo
n = (Int, Int) -> EP ()
printWhitespace (SrcSpanInfo -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos (Name SrcSpanInfo -> SrcSpanInfo
forall l. Name l -> l
forall (ast :: * -> *) l. Annotated ast => ast l -> l
ann Name SrcSpanInfo
n)) EP () -> EP () -> EP ()
forall a b. EP a -> EP b -> EP b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> Name SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactP Name SrcSpanInfo
n
| Bool
otherwise =
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints (Name SrcSpanInfo -> SrcSpanInfo
forall l. Name l -> l
forall (ast :: * -> *) l. Annotated ast => ast l -> l
ann Name SrcSpanInfo
n) of
[SrcSpan
a,SrcSpan
b,SrcSpan
c] -> do
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
a) [Char]
"`"
(Int, Int) -> EP ()
printWhitespace (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
b)
Name SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactP Name SrcSpanInfo
n
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
c) [Char]
"`"
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: Name (epInfixName) is given wrong number of srcInfoPoints"
instance ExactP IPName where
exactP :: IPName SrcSpanInfo -> EP ()
exactP IPName SrcSpanInfo
ipn = case IPName SrcSpanInfo
ipn of
IPDup SrcSpanInfo
_ [Char]
str -> [Char] -> EP ()
printString ([Char] -> EP ()) -> [Char] -> EP ()
forall a b. (a -> b) -> a -> b
$ Char
'?'Char -> ShowS
forall a. a -> [a] -> [a]
:[Char]
str
IPLin SrcSpanInfo
_ [Char]
str -> [Char] -> EP ()
printString ([Char] -> EP ()) -> [Char] -> EP ()
forall a b. (a -> b) -> a -> b
$ Char
'%'Char -> ShowS
forall a. a -> [a] -> [a]
:[Char]
str
instance ExactP QOp where
exactP :: QOp SrcSpanInfo -> EP ()
exactP QOp SrcSpanInfo
qop = case QOp SrcSpanInfo
qop of
QVarOp SrcSpanInfo
_ QName SrcSpanInfo
qn -> QName SrcSpanInfo -> EP ()
epInfixQName QName SrcSpanInfo
qn
QConOp SrcSpanInfo
_ QName SrcSpanInfo
qn -> QName SrcSpanInfo -> EP ()
epInfixQName QName SrcSpanInfo
qn
instance ExactP Op where
exactP :: Op SrcSpanInfo -> EP ()
exactP Op SrcSpanInfo
op = case Op SrcSpanInfo
op of
VarOp SrcSpanInfo
_ Name SrcSpanInfo
n -> Name SrcSpanInfo -> EP ()
epInfixName Name SrcSpanInfo
n
ConOp SrcSpanInfo
_ Name SrcSpanInfo
n -> Name SrcSpanInfo -> EP ()
epInfixName Name SrcSpanInfo
n
instance ExactP CName where
exactP :: CName SrcSpanInfo -> EP ()
exactP CName SrcSpanInfo
cn = case CName SrcSpanInfo
cn of
VarName SrcSpanInfo
_ Name SrcSpanInfo
n -> Name SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactP Name SrcSpanInfo
n
ConName SrcSpanInfo
_ Name SrcSpanInfo
n -> Name SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactP Name SrcSpanInfo
n
instance ExactP Namespace where
exactP :: Namespace SrcSpanInfo -> EP ()
exactP Namespace SrcSpanInfo
ns = case Namespace SrcSpanInfo
ns of
NoNamespace SrcSpanInfo
_ -> () -> EP ()
forall a. a -> EP a
forall (m :: * -> *) a. Monad m => a -> m a
return ()
TypeNamespace SrcSpanInfo
l -> (Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpanInfo -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpanInfo
l) [Char]
"type"
PatternNamespace SrcSpanInfo
l -> (Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpanInfo -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpanInfo
l) [Char]
"pattern"
instance ExactP ExportSpec where
exactP :: ExportSpec SrcSpanInfo -> EP ()
exactP ExportSpec SrcSpanInfo
espec = case ExportSpec SrcSpanInfo
espec of
EVar SrcSpanInfo
_ QName SrcSpanInfo
qn -> QName SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC QName SrcSpanInfo
qn
EAbs SrcSpanInfo
_ Namespace SrcSpanInfo
ns QName SrcSpanInfo
qn -> Namespace SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactP Namespace SrcSpanInfo
ns EP () -> EP () -> EP ()
forall a b. EP a -> EP b -> EP b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> QName SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC QName SrcSpanInfo
qn
EThingWith SrcSpanInfo
l EWildcard SrcSpanInfo
wc QName SrcSpanInfo
qn [CName SrcSpanInfo]
cns ->
let names :: [CName SrcSpanInfo]
names = case EWildcard SrcSpanInfo
wc of
NoWildcard {} -> [CName SrcSpanInfo]
cns
EWildcard SrcSpanInfo
wcl Int
n ->
let ([CName SrcSpanInfo]
before,[CName SrcSpanInfo]
after) = Int
-> [CName SrcSpanInfo]
-> ([CName SrcSpanInfo], [CName SrcSpanInfo])
forall a. Int -> [a] -> ([a], [a])
splitAt Int
n [CName SrcSpanInfo]
cns
wildcardName :: CName SrcSpanInfo
wildcardName = SrcSpanInfo -> Name SrcSpanInfo -> CName SrcSpanInfo
forall l. l -> Name l -> CName l
VarName SrcSpanInfo
wcl (SrcSpanInfo -> [Char] -> Name SrcSpanInfo
forall l. l -> [Char] -> Name l
Ident SrcSpanInfo
wcl [Char]
"..")
in [CName SrcSpanInfo]
before [CName SrcSpanInfo] -> [CName SrcSpanInfo] -> [CName SrcSpanInfo]
forall a. [a] -> [a] -> [a]
++ [CName SrcSpanInfo
wildcardName] [CName SrcSpanInfo] -> [CName SrcSpanInfo] -> [CName SrcSpanInfo]
forall a. [a] -> [a] -> [a]
++ [CName SrcSpanInfo]
after
k :: Int
k = [SrcSpan] -> Int
forall a. [a] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length (SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l)
in QName SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactP QName SrcSpanInfo
qn EP () -> EP () -> EP ()
forall a b. EP a -> EP b -> EP b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> [(SrcSpan, [Char])] -> [CName SrcSpanInfo] -> EP ()
forall (ast :: * -> *) loc.
(ExactP ast, SrcInfo loc) =>
[(loc, [Char])] -> [ast SrcSpanInfo] -> EP ()
printInterleaved ([SrcSpan] -> [[Char]] -> [(SrcSpan, [Char])]
forall a b. [a] -> [b] -> [(a, b)]
zip (SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l) ([[Char]] -> [(SrcSpan, [Char])])
-> [[Char]] -> [(SrcSpan, [Char])]
forall a b. (a -> b) -> a -> b
$ [Char]
"("[Char] -> [[Char]] -> [[Char]]
forall a. a -> [a] -> [a]
:Int -> [Char] -> [[Char]]
forall a. Int -> a -> [a]
replicate (Int
kInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
2) [Char]
"," [[Char]] -> [[Char]] -> [[Char]]
forall a. [a] -> [a] -> [a]
++ [[Char]
")"]) [CName SrcSpanInfo]
names
EModuleContents SrcSpanInfo
_ ModuleName SrcSpanInfo
mn -> [Char] -> EP ()
printString [Char]
"module" EP () -> EP () -> EP ()
forall a b. EP a -> EP b -> EP b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> ModuleName SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC ModuleName SrcSpanInfo
mn
instance ExactP ExportSpecList where
exactP :: ExportSpecList SrcSpanInfo -> EP ()
exactP (ExportSpecList SrcSpanInfo
l [ExportSpec SrcSpanInfo]
ess) =
let k :: Int
k = [SrcSpan] -> Int
forall a. [a] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length (SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l)
in [(SrcSpan, [Char])] -> [ExportSpec SrcSpanInfo] -> EP ()
forall (ast :: * -> *) loc.
(ExactP ast, SrcInfo loc) =>
[(loc, [Char])] -> [ast SrcSpanInfo] -> EP ()
printInterleaved ([SrcSpan] -> [[Char]] -> [(SrcSpan, [Char])]
forall a b. [a] -> [b] -> [(a, b)]
zip (SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l) ([[Char]] -> [(SrcSpan, [Char])])
-> [[Char]] -> [(SrcSpan, [Char])]
forall a b. (a -> b) -> a -> b
$ [Char]
"("[Char] -> [[Char]] -> [[Char]]
forall a. a -> [a] -> [a]
: Int -> [Char] -> [[Char]]
forall a. Int -> a -> [a]
replicate (Int
kInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
2) [Char]
"," [[Char]] -> [[Char]] -> [[Char]]
forall a. [a] -> [a] -> [a]
++ [[Char]
")"]) [ExportSpec SrcSpanInfo]
ess
instance ExactP ImportSpecList where
exactP :: ImportSpecList SrcSpanInfo -> EP ()
exactP (ImportSpecList SrcSpanInfo
l Bool
hid [ImportSpec SrcSpanInfo]
ispecs) = do
let pts :: [SrcSpan]
pts = SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l
pts1 <- if Bool
hid then do
let (SrcSpan
x:[SrcSpan]
pts') = [SrcSpan]
pts
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
x) [Char]
"hiding"
[SrcSpan] -> EP [SrcSpan]
forall a. a -> EP a
forall (m :: * -> *) a. Monad m => a -> m a
return [SrcSpan]
pts'
else [SrcSpan] -> EP [SrcSpan]
forall a. a -> EP a
forall (m :: * -> *) a. Monad m => a -> m a
return [SrcSpan]
pts
let k = [SrcSpan] -> Int
forall a. [a] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [SrcSpan]
pts1
printInterleaved (zip pts1 $ "(": replicate (k-2) "," ++ [")"]) ispecs
instance ExactP ImportSpec where
exactP :: ImportSpec SrcSpanInfo -> EP ()
exactP ImportSpec SrcSpanInfo
ispec = case ImportSpec SrcSpanInfo
ispec of
IVar SrcSpanInfo
_ Name SrcSpanInfo
qn -> Name SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Name SrcSpanInfo
qn
IAbs SrcSpanInfo
_ Namespace SrcSpanInfo
ns Name SrcSpanInfo
n -> Namespace SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactP Namespace SrcSpanInfo
ns EP () -> EP () -> EP ()
forall a b. EP a -> EP b -> EP b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> Name SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Name SrcSpanInfo
n
IThingAll SrcSpanInfo
l Name SrcSpanInfo
n -> Name SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactP Name SrcSpanInfo
n EP () -> EP () -> EP ()
forall a b. EP a -> EP b -> EP b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> SrcSpanInfo -> [[Char]] -> EP ()
printPoints SrcSpanInfo
l [[Char]
"(",[Char]
"..",[Char]
")"]
IThingWith SrcSpanInfo
l Name SrcSpanInfo
n [CName SrcSpanInfo]
cns ->
let k :: Int
k = [SrcSpan] -> Int
forall a. [a] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length (SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l)
in Name SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactP Name SrcSpanInfo
n EP () -> EP () -> EP ()
forall a b. EP a -> EP b -> EP b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> [(SrcSpan, [Char])] -> [CName SrcSpanInfo] -> EP ()
forall (ast :: * -> *) loc.
(ExactP ast, SrcInfo loc) =>
[(loc, [Char])] -> [ast SrcSpanInfo] -> EP ()
printInterleaved ([SrcSpan] -> [[Char]] -> [(SrcSpan, [Char])]
forall a b. [a] -> [b] -> [(a, b)]
zip (SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l) ([[Char]] -> [(SrcSpan, [Char])])
-> [[Char]] -> [(SrcSpan, [Char])]
forall a b. (a -> b) -> a -> b
$ [Char]
"("[Char] -> [[Char]] -> [[Char]]
forall a. a -> [a] -> [a]
:Int -> [Char] -> [[Char]]
forall a. Int -> a -> [a]
replicate (Int
kInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
2) [Char]
"," [[Char]] -> [[Char]] -> [[Char]]
forall a. [a] -> [a] -> [a]
++ [[Char]
")"]) [CName SrcSpanInfo]
cns
instance ExactP ImportDecl where
exactP :: ImportDecl SrcSpanInfo -> EP ()
exactP (ImportDecl SrcSpanInfo
l ModuleName SrcSpanInfo
mn Bool
qf Bool
src Bool
safe Maybe [Char]
mpkg Maybe (ModuleName SrcSpanInfo)
mas Maybe (ImportSpecList SrcSpanInfo)
mispecs) = do
[Char] -> EP ()
printString [Char]
"import"
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
(SrcSpan
_:[SrcSpan]
pts) -> do
pts1 <- if Bool
src then
case [SrcSpan]
pts of
SrcSpan
x:SrcSpan
y:[SrcSpan]
pts' -> do
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
x) [Char]
"{-# SOURCE"
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
y) [Char]
"#-}"
[SrcSpan] -> EP [SrcSpan]
forall a. a -> EP a
forall (m :: * -> *) a. Monad m => a -> m a
return [SrcSpan]
pts'
[SrcSpan]
_ -> [Char] -> EP [SrcSpan]
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: ImportDecl is given too few srcInfoPoints"
else [SrcSpan] -> EP [SrcSpan]
forall a. a -> EP a
forall (m :: * -> *) a. Monad m => a -> m a
return [SrcSpan]
pts
pts2 <- if safe then
case pts1 of
SrcSpan
x:[SrcSpan]
pts' -> do
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
x) [Char]
"safe"
[SrcSpan] -> EP [SrcSpan]
forall a. a -> EP a
forall (m :: * -> *) a. Monad m => a -> m a
return [SrcSpan]
pts'
[SrcSpan]
_ -> [Char] -> EP [SrcSpan]
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: ImportDecl is given too few srcInfoPoints"
else return pts1
pts3 <- if qf then
case pts2 of
SrcSpan
x:[SrcSpan]
pts' -> do
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
x) [Char]
"qualified"
[SrcSpan] -> EP [SrcSpan]
forall a. a -> EP a
forall (m :: * -> *) a. Monad m => a -> m a
return [SrcSpan]
pts'
[SrcSpan]
_ -> [Char] -> EP [SrcSpan]
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: ImportDecl is given too few srcInfoPoints"
else return pts2
pts4 <- case mpkg of
Just [Char]
pkg ->
case [SrcSpan]
pts3 of
SrcSpan
x:[SrcSpan]
pts' -> do
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
x) ([Char] -> EP ()) -> [Char] -> EP ()
forall a b. (a -> b) -> a -> b
$ ShowS
forall a. Show a => a -> [Char]
show [Char]
pkg
[SrcSpan] -> EP [SrcSpan]
forall a. a -> EP a
forall (m :: * -> *) a. Monad m => a -> m a
return [SrcSpan]
pts'
[SrcSpan]
_ -> [Char] -> EP [SrcSpan]
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: ImportDecl is given too few srcInfoPoints"
Maybe [Char]
_ -> [SrcSpan] -> EP [SrcSpan]
forall a. a -> EP a
forall (m :: * -> *) a. Monad m => a -> m a
return [SrcSpan]
pts3
exactPC mn
_ <- case mas of
Just ModuleName SrcSpanInfo
as ->
case [SrcSpan]
pts4 of
SrcSpan
x:[SrcSpan]
pts' -> do
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
x) [Char]
"as"
ModuleName SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC ModuleName SrcSpanInfo
as
[SrcSpan] -> EP [SrcSpan]
forall a. a -> EP a
forall (m :: * -> *) a. Monad m => a -> m a
return [SrcSpan]
pts'
[SrcSpan]
_ -> [Char] -> EP [SrcSpan]
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: ImportDecl is given too few srcInfoPoints"
Maybe (ModuleName SrcSpanInfo)
_ -> [SrcSpan] -> EP [SrcSpan]
forall a. a -> EP a
forall (m :: * -> *) a. Monad m => a -> m a
return [SrcSpan]
pts4
case mispecs of
Maybe (ImportSpecList SrcSpanInfo)
Nothing -> () -> EP ()
forall a. a -> EP a
forall (m :: * -> *) a. Monad m => a -> m a
return ()
Just ImportSpecList SrcSpanInfo
ispecs -> ImportSpecList SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC ImportSpecList SrcSpanInfo
ispecs
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: ImportDecl is given too few srcInfoPoints"
instance ExactP Module where
exactP :: Module SrcSpanInfo -> EP ()
exactP Module SrcSpanInfo
mdl = case Module SrcSpanInfo
mdl of
Module SrcSpanInfo
l Maybe (ModuleHead SrcSpanInfo)
mmh [ModulePragma SrcSpanInfo]
oss [ImportDecl SrcSpanInfo]
ids [Decl SrcSpanInfo]
decls -> do
let ([SrcSpan]
oPts, [SrcSpan]
pts) = Int -> [SrcSpan] -> ([SrcSpan], [SrcSpan])
forall a. Int -> [a] -> ([a], [a])
splitAt (Int -> Int -> Int
forall a. Ord a => a -> a -> a
max ([ModulePragma SrcSpanInfo] -> Int
forall a. [a] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [ModulePragma SrcSpanInfo]
oss Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
1) Int
2) (SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l)
[SrcSpan] -> [ModulePragma SrcSpanInfo] -> EP ()
forall (ast :: * -> *).
ExactP ast =>
[SrcSpan] -> [ast SrcSpanInfo] -> EP ()
layoutList [SrcSpan]
oPts [ModulePragma SrcSpanInfo]
oss
(ModuleHead SrcSpanInfo -> EP ())
-> Maybe (ModuleHead SrcSpanInfo) -> EP ()
forall a. (a -> EP ()) -> Maybe a -> EP ()
maybeEP ModuleHead SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Maybe (ModuleHead SrcSpanInfo)
mmh
[((Int, Int), EP ())] -> [((Int, Int), EP ())] -> EP ()
printStreams (((SrcSpan, [Char]) -> ((Int, Int), EP ()))
-> [(SrcSpan, [Char])] -> [((Int, Int), EP ())]
forall a b. (a -> b) -> [a] -> [b]
map (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos (SrcSpan -> (Int, Int))
-> ([Char] -> EP ()) -> (SrcSpan, [Char]) -> ((Int, Int), EP ())
forall b c b' c'. (b -> c) -> (b' -> c') -> (b, b') -> (c, c')
forall (a :: * -> * -> *) b c b' c'.
Arrow a =>
a b c -> a b' c' -> a (b, b') (c, c')
*** [Char] -> EP ()
printString) ([(SrcSpan, [Char])] -> [((Int, Int), EP ())])
-> [(SrcSpan, [Char])] -> [((Int, Int), EP ())]
forall a b. (a -> b) -> a -> b
$ [SrcSpan] -> [(SrcSpan, [Char])]
lList [SrcSpan]
pts)
((ImportDecl SrcSpanInfo -> ((Int, Int), EP ()))
-> [ImportDecl SrcSpanInfo] -> [((Int, Int), EP ())]
forall a b. (a -> b) -> [a] -> [b]
map (SrcSpanInfo -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos (SrcSpanInfo -> (Int, Int))
-> (ImportDecl SrcSpanInfo -> SrcSpanInfo)
-> ImportDecl SrcSpanInfo
-> (Int, Int)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ImportDecl SrcSpanInfo -> SrcSpanInfo
forall l. ImportDecl l -> l
forall (ast :: * -> *) l. Annotated ast => ast l -> l
ann (ImportDecl SrcSpanInfo -> (Int, Int))
-> (ImportDecl SrcSpanInfo -> EP ())
-> ImportDecl SrcSpanInfo
-> ((Int, Int), EP ())
forall b c c'. (b -> c) -> (b -> c') -> b -> (c, c')
forall (a :: * -> * -> *) b c c'.
Arrow a =>
a b c -> a b c' -> a b (c, c')
&&& ImportDecl SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC) [ImportDecl SrcSpanInfo]
ids [((Int, Int), EP ())]
-> [((Int, Int), EP ())] -> [((Int, Int), EP ())]
forall a. [a] -> [a] -> [a]
++ (Decl SrcSpanInfo -> ((Int, Int), EP ()))
-> [Decl SrcSpanInfo] -> [((Int, Int), EP ())]
forall a b. (a -> b) -> [a] -> [b]
map (SrcSpanInfo -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos (SrcSpanInfo -> (Int, Int))
-> (Decl SrcSpanInfo -> SrcSpanInfo)
-> Decl SrcSpanInfo
-> (Int, Int)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Decl SrcSpanInfo -> SrcSpanInfo
forall l. Decl l -> l
forall (ast :: * -> *) l. Annotated ast => ast l -> l
ann (Decl SrcSpanInfo -> (Int, Int))
-> (Decl SrcSpanInfo -> EP ())
-> Decl SrcSpanInfo
-> ((Int, Int), EP ())
forall b c c'. (b -> c) -> (b -> c') -> b -> (c, c')
forall (a :: * -> * -> *) b c c'.
Arrow a =>
a b c -> a b c' -> a b (c, c')
&&& Decl SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC) ([Decl SrcSpanInfo] -> [Decl SrcSpanInfo]
sepFunBinds [Decl SrcSpanInfo]
decls))
XmlPage SrcSpanInfo
l ModuleName SrcSpanInfo
_mn [ModulePragma SrcSpanInfo]
oss XName SrcSpanInfo
xn [XAttr SrcSpanInfo]
attrs Maybe (Exp SrcSpanInfo)
mat [Exp SrcSpanInfo]
es -> do
let ([SrcSpan]
oPts, [SrcSpan]
pPts) = Int -> [SrcSpan] -> ([SrcSpan], [SrcSpan])
forall a. Int -> [a] -> ([a], [a])
splitAt (Int -> Int -> Int
forall a. Ord a => a -> a -> a
max ([ModulePragma SrcSpanInfo] -> Int
forall a. [a] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [ModulePragma SrcSpanInfo]
oss Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
1) Int
2) ([SrcSpan] -> ([SrcSpan], [SrcSpan]))
-> [SrcSpan] -> ([SrcSpan], [SrcSpan])
forall a b. (a -> b) -> a -> b
$ SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l
case [SrcSpan]
pPts of
[SrcSpan
a,SrcSpan
b,SrcSpan
c,SrcSpan
d,SrcSpan
e] -> do
[SrcSpan] -> [ModulePragma SrcSpanInfo] -> EP ()
forall (ast :: * -> *).
ExactP ast =>
[SrcSpan] -> [ast SrcSpanInfo] -> EP ()
layoutList [SrcSpan]
oPts [ModulePragma SrcSpanInfo]
oss
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
a) [Char]
"<"
XName SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC XName SrcSpanInfo
xn
(XAttr SrcSpanInfo -> EP ()) -> [XAttr SrcSpanInfo] -> EP ()
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> m b) -> t a -> m ()
mapM_ XAttr SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC [XAttr SrcSpanInfo]
attrs
(Exp SrcSpanInfo -> EP ()) -> Maybe (Exp SrcSpanInfo) -> EP ()
forall a. (a -> EP ()) -> Maybe a -> EP ()
maybeEP Exp SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Maybe (Exp SrcSpanInfo)
mat
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
b) [Char]
">"
(Exp SrcSpanInfo -> EP ()) -> [Exp SrcSpanInfo] -> EP ()
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> m b) -> t a -> m ()
mapM_ Exp SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC [Exp SrcSpanInfo]
es
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
c) [Char]
"</"
(Int, Int) -> EP ()
printWhitespace (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
d)
XName SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactP XName SrcSpanInfo
xn
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
e) [Char]
">"
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: Module: XmlPage is given wrong number of srcInfoPoints"
XmlHybrid SrcSpanInfo
l Maybe (ModuleHead SrcSpanInfo)
mmh [ModulePragma SrcSpanInfo]
oss [ImportDecl SrcSpanInfo]
ids [Decl SrcSpanInfo]
decls XName SrcSpanInfo
xn [XAttr SrcSpanInfo]
attrs Maybe (Exp SrcSpanInfo)
mat [Exp SrcSpanInfo]
es -> do
let ([SrcSpan]
oPts, [SrcSpan]
pts) = Int -> [SrcSpan] -> ([SrcSpan], [SrcSpan])
forall a. Int -> [a] -> ([a], [a])
splitAt (Int -> Int -> Int
forall a. Ord a => a -> a -> a
max ([ModulePragma SrcSpanInfo] -> Int
forall a. [a] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [ModulePragma SrcSpanInfo]
oss Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
1) Int
2) (SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l)
[SrcSpan] -> [ModulePragma SrcSpanInfo] -> EP ()
forall (ast :: * -> *).
ExactP ast =>
[SrcSpan] -> [ast SrcSpanInfo] -> EP ()
layoutList [SrcSpan]
oPts [ModulePragma SrcSpanInfo]
oss
(ModuleHead SrcSpanInfo -> EP ())
-> Maybe (ModuleHead SrcSpanInfo) -> EP ()
forall a. (a -> EP ()) -> Maybe a -> EP ()
maybeEP ModuleHead SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Maybe (ModuleHead SrcSpanInfo)
mmh
let ([SrcSpan]
dPts, [SrcSpan]
pPts) = Int -> [SrcSpan] -> ([SrcSpan], [SrcSpan])
forall a. Int -> [a] -> ([a], [a])
splitAt ([SrcSpan] -> Int
forall a. [a] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [SrcSpan]
pts Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
5) [SrcSpan]
pts
case [SrcSpan]
pPts of
[SrcSpan
a,SrcSpan
b,SrcSpan
c,SrcSpan
d,SrcSpan
e] -> do
[((Int, Int), EP ())] -> [((Int, Int), EP ())] -> EP ()
printStreams (((SrcSpan, [Char]) -> ((Int, Int), EP ()))
-> [(SrcSpan, [Char])] -> [((Int, Int), EP ())]
forall a b. (a -> b) -> [a] -> [b]
map (\(SrcSpan
p,[Char]
s) -> (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
p, [Char] -> EP ()
printString [Char]
s)) ([(SrcSpan, [Char])] -> [((Int, Int), EP ())])
-> [(SrcSpan, [Char])] -> [((Int, Int), EP ())]
forall a b. (a -> b) -> a -> b
$ [SrcSpan] -> [(SrcSpan, [Char])]
lList [SrcSpan]
dPts)
((ImportDecl SrcSpanInfo -> ((Int, Int), EP ()))
-> [ImportDecl SrcSpanInfo] -> [((Int, Int), EP ())]
forall a b. (a -> b) -> [a] -> [b]
map (\ImportDecl SrcSpanInfo
i -> (SrcSpanInfo -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos (SrcSpanInfo -> (Int, Int)) -> SrcSpanInfo -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ ImportDecl SrcSpanInfo -> SrcSpanInfo
forall l. ImportDecl l -> l
forall (ast :: * -> *) l. Annotated ast => ast l -> l
ann ImportDecl SrcSpanInfo
i, ImportDecl SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC ImportDecl SrcSpanInfo
i)) [ImportDecl SrcSpanInfo]
ids [((Int, Int), EP ())]
-> [((Int, Int), EP ())] -> [((Int, Int), EP ())]
forall a. [a] -> [a] -> [a]
++ (Decl SrcSpanInfo -> ((Int, Int), EP ()))
-> [Decl SrcSpanInfo] -> [((Int, Int), EP ())]
forall a b. (a -> b) -> [a] -> [b]
map (\Decl SrcSpanInfo
d' -> (SrcSpanInfo -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos (SrcSpanInfo -> (Int, Int)) -> SrcSpanInfo -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Decl SrcSpanInfo -> SrcSpanInfo
forall l. Decl l -> l
forall (ast :: * -> *) l. Annotated ast => ast l -> l
ann Decl SrcSpanInfo
d', Decl SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Decl SrcSpanInfo
d')) ([Decl SrcSpanInfo] -> [Decl SrcSpanInfo]
sepFunBinds [Decl SrcSpanInfo]
decls))
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
a) [Char]
"<"
XName SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC XName SrcSpanInfo
xn
(XAttr SrcSpanInfo -> EP ()) -> [XAttr SrcSpanInfo] -> EP ()
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> m b) -> t a -> m ()
mapM_ XAttr SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC [XAttr SrcSpanInfo]
attrs
(Exp SrcSpanInfo -> EP ()) -> Maybe (Exp SrcSpanInfo) -> EP ()
forall a. (a -> EP ()) -> Maybe a -> EP ()
maybeEP Exp SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Maybe (Exp SrcSpanInfo)
mat
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
b) [Char]
">"
(Exp SrcSpanInfo -> EP ()) -> [Exp SrcSpanInfo] -> EP ()
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> m b) -> t a -> m ()
mapM_ Exp SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC [Exp SrcSpanInfo]
es
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
c) [Char]
"</"
(Int, Int) -> EP ()
printWhitespace (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
d)
XName SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactP XName SrcSpanInfo
xn
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
e) [Char]
">"
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: Module: XmlHybrid is given wrong number of srcInfoPoints"
instance ExactP ModuleHead where
exactP :: ModuleHead SrcSpanInfo -> EP ()
exactP (ModuleHead SrcSpanInfo
l ModuleName SrcSpanInfo
mn Maybe (WarningText SrcSpanInfo)
mwt Maybe (ExportSpecList SrcSpanInfo)
mess) =
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
[SrcSpan
a,SrcSpan
b] -> do
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
a) [Char]
"module"
ModuleName SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC ModuleName SrcSpanInfo
mn
(WarningText SrcSpanInfo -> EP ())
-> Maybe (WarningText SrcSpanInfo) -> EP ()
forall a. (a -> EP ()) -> Maybe a -> EP ()
maybeEP WarningText SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Maybe (WarningText SrcSpanInfo)
mwt
(ExportSpecList SrcSpanInfo -> EP ())
-> Maybe (ExportSpecList SrcSpanInfo) -> EP ()
forall a. (a -> EP ()) -> Maybe a -> EP ()
maybeEP ExportSpecList SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Maybe (ExportSpecList SrcSpanInfo)
mess
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
b) [Char]
"where"
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: ModuleHead is given wrong number of srcInfoPoints"
instance ExactP ModulePragma where
exactP :: ModulePragma SrcSpanInfo -> EP ()
exactP ModulePragma SrcSpanInfo
op = case ModulePragma SrcSpanInfo
op of
LanguagePragma SrcSpanInfo
l [Name SrcSpanInfo]
ns ->
let pts :: [SrcSpan]
pts = SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l
k :: Int
k = [Name SrcSpanInfo] -> Int
forall a. [a] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [Name SrcSpanInfo]
ns Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
1
m :: Int
m = [SrcSpan] -> Int
forall a. [a] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [SrcSpan]
pts Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
k Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
2
in [(SrcSpan, [Char])] -> [Name SrcSpanInfo] -> EP ()
forall (ast :: * -> *) loc.
(ExactP ast, SrcInfo loc) =>
[(loc, [Char])] -> [ast SrcSpanInfo] -> EP ()
printInterleaved ([SrcSpan] -> [[Char]] -> [(SrcSpan, [Char])]
forall a b. [a] -> [b] -> [(a, b)]
zip [SrcSpan]
pts ([Char]
"{-# LANGUAGE"[Char] -> [[Char]] -> [[Char]]
forall a. a -> [a] -> [a]
:Int -> [Char] -> [[Char]]
forall a. Int -> a -> [a]
replicate Int
k [Char]
"," [[Char]] -> [[Char]] -> [[Char]]
forall a. [a] -> [a] -> [a]
++ Int -> [Char] -> [[Char]]
forall a. Int -> a -> [a]
replicate Int
m [Char]
"" [[Char]] -> [[Char]] -> [[Char]]
forall a. [a] -> [a] -> [a]
++ [[Char]
"#-}"])) [Name SrcSpanInfo]
ns
OptionsPragma SrcSpanInfo
l Maybe Tool
mt [Char]
str ->
let k :: Int
k = [SrcSpan] -> Int
forall a. [a] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length (SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l)
addSpace :: ShowS
addSpace xs :: [Char]
xs@(Char
'\n':[Char]
_) = [Char]
xs
addSpace [Char]
xs = Char
' 'Char -> ShowS
forall a. a -> [a] -> [a]
:[Char]
xs
opstr :: [Char]
opstr = [Char]
"{-# OPTIONS" [Char] -> ShowS
forall a. [a] -> [a] -> [a]
++ case Maybe Tool
mt of { Just Tool
t -> [Char]
"_" [Char] -> ShowS
forall a. [a] -> [a] -> [a]
++ Tool -> [Char]
forall a. Show a => a -> [Char]
show Tool
t ; Maybe Tool
_ -> [Char]
"" } [Char] -> ShowS
forall a. [a] -> [a] -> [a]
++ ShowS
addSpace [Char]
str
in SrcSpanInfo -> [[Char]] -> EP ()
printPoints SrcSpanInfo
l ([[Char]] -> EP ()) -> [[Char]] -> EP ()
forall a b. (a -> b) -> a -> b
$ [Char]
opstr [Char] -> [[Char]] -> [[Char]]
forall a. a -> [a] -> [a]
: Int -> [Char] -> [[Char]]
forall a. Int -> a -> [a]
replicate (Int
kInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
2) [Char]
"" [[Char]] -> [[Char]] -> [[Char]]
forall a. [a] -> [a] -> [a]
++ [[Char]
"#-}"]
AnnModulePragma SrcSpanInfo
l Annotation SrcSpanInfo
ann' ->
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
[SrcSpan
_,SrcSpan
b] -> do
[Char] -> EP ()
printString [Char]
"{-# ANN"
Annotation SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Annotation SrcSpanInfo
ann'
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
b) [Char]
"#-}"
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: ModulePragma: AnnPragma is given wrong number of srcInfoPoints"
instance ExactP WarningText where
exactP :: WarningText SrcSpanInfo -> EP ()
exactP (DeprText SrcSpanInfo
l [Char]
str) = SrcSpanInfo -> [[Char]] -> EP ()
printPoints SrcSpanInfo
l [[Char]
"{-# DEPRECATED", [Char]
str, [Char]
"#-}"]
exactP (WarnText SrcSpanInfo
l [Char]
str) = SrcSpanInfo -> [[Char]] -> EP ()
printPoints SrcSpanInfo
l [[Char]
"{-# WARNING", [Char]
str, [Char]
"#-}"]
instance ExactP Assoc where
exactP :: Assoc SrcSpanInfo -> EP ()
exactP Assoc SrcSpanInfo
a = case Assoc SrcSpanInfo
a of
AssocNone SrcSpanInfo
_ -> [Char] -> EP ()
printString [Char]
"infix"
AssocLeft SrcSpanInfo
_ -> [Char] -> EP ()
printString [Char]
"infixl"
AssocRight SrcSpanInfo
_ -> [Char] -> EP ()
printString [Char]
"infixr"
instance ExactP DataOrNew where
exactP :: DataOrNew SrcSpanInfo -> EP ()
exactP (DataType SrcSpanInfo
_) = [Char] -> EP ()
printString [Char]
"data"
exactP (NewType SrcSpanInfo
_) = [Char] -> EP ()
printString [Char]
"newtype"
instance ExactP TypeEqn where
exactP :: TypeEqn SrcSpanInfo -> EP ()
exactP (TypeEqn SrcSpanInfo
l Type SrcSpanInfo
t1 Type SrcSpanInfo
t2) =
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
[SrcSpan
a] -> do
Type SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Type SrcSpanInfo
t1
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
a) [Char]
"="
Type SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Type SrcSpanInfo
t2
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: TypeEqn is given wrong number of srcInfoPoints"
instance ExactP InjectivityInfo where
exactP :: InjectivityInfo SrcSpanInfo -> EP ()
exactP (InjectivityInfo SrcSpanInfo
l Name SrcSpanInfo
to [Name SrcSpanInfo]
from) =
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
SrcSpan
a:SrcSpan
b:[SrcSpan]
_ -> do
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
a) [Char]
"|"
Name SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Name SrcSpanInfo
to
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
b) [Char]
"->"
(Name SrcSpanInfo -> EP ()) -> [Name SrcSpanInfo] -> EP ()
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> m b) -> t a -> m ()
mapM_ Name SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC [Name SrcSpanInfo]
from
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: InjectivityInfo given wrong number of srcInfoPoints"
instance ExactP ResultSig where
exactP :: ResultSig SrcSpanInfo -> EP ()
exactP (KindSig SrcSpanInfo
l Type SrcSpanInfo
k) =
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
SrcSpan
a:[SrcSpan]
_ -> do
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
a) [Char]
"::"
Type SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Type SrcSpanInfo
k
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: ResultSig given wrong number of srcInfoPoints"
exactP (TyVarSig SrcSpanInfo
l TyVarBind SrcSpanInfo
tv) =
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
SrcSpan
a:[SrcSpan]
_ -> do
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
a) [Char]
"="
TyVarBind SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC TyVarBind SrcSpanInfo
tv
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: ResultSig given wrong number of srcInfoPoints"
instance ExactP Decl where
exactP :: Decl SrcSpanInfo -> EP ()
exactP Decl SrcSpanInfo
decl = case Decl SrcSpanInfo
decl of
TypeDecl SrcSpanInfo
l DeclHead SrcSpanInfo
dh Type SrcSpanInfo
t ->
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
[SrcSpan
a,SrcSpan
b] -> do
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
a) [Char]
"type"
DeclHead SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC DeclHead SrcSpanInfo
dh
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
b) [Char]
"="
Type SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Type SrcSpanInfo
t
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: Decl: TypeDecl is given wrong number of srcInfoPoints"
TypeFamDecl SrcSpanInfo
l DeclHead SrcSpanInfo
dh Maybe (ResultSig SrcSpanInfo)
mk Maybe (InjectivityInfo SrcSpanInfo)
mi ->
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
SrcSpan
a:SrcSpan
b:[SrcSpan]
_ -> do
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
a) [Char]
"type"
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
b) [Char]
"family"
DeclHead SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC DeclHead SrcSpanInfo
dh
(ResultSig SrcSpanInfo -> EP ())
-> Maybe (ResultSig SrcSpanInfo) -> EP ()
forall a. (a -> EP ()) -> Maybe a -> EP ()
maybeEP ResultSig SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Maybe (ResultSig SrcSpanInfo)
mk
(InjectivityInfo SrcSpanInfo -> EP ())
-> Maybe (InjectivityInfo SrcSpanInfo) -> EP ()
forall a. (a -> EP ()) -> Maybe a -> EP ()
maybeEP InjectivityInfo SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Maybe (InjectivityInfo SrcSpanInfo)
mi
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: Decl: TypeFamDecl is given wrong number of srcInfoPoints"
ClosedTypeFamDecl SrcSpanInfo
l DeclHead SrcSpanInfo
dh Maybe (ResultSig SrcSpanInfo)
mk Maybe (InjectivityInfo SrcSpanInfo)
mi [TypeEqn SrcSpanInfo]
eqns ->
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
SrcSpan
a:SrcSpan
b:SrcSpan
c:[SrcSpan]
_ -> do
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
a) [Char]
"type"
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
b) [Char]
"family"
DeclHead SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC DeclHead SrcSpanInfo
dh
(ResultSig SrcSpanInfo -> EP ())
-> Maybe (ResultSig SrcSpanInfo) -> EP ()
forall a. (a -> EP ()) -> Maybe a -> EP ()
maybeEP ResultSig SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Maybe (ResultSig SrcSpanInfo)
mk
(InjectivityInfo SrcSpanInfo -> EP ())
-> Maybe (InjectivityInfo SrcSpanInfo) -> EP ()
forall a. (a -> EP ()) -> Maybe a -> EP ()
maybeEP InjectivityInfo SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Maybe (InjectivityInfo SrcSpanInfo)
mi
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
c) [Char]
"where"
(TypeEqn SrcSpanInfo -> EP ()) -> [TypeEqn SrcSpanInfo] -> EP ()
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> m b) -> t a -> m ()
mapM_ TypeEqn SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactP [TypeEqn SrcSpanInfo]
eqns
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: Decl: ClosedTypeFamDecl is given wrong number of srcInfoPoints"
DataDecl SrcSpanInfo
l DataOrNew SrcSpanInfo
dn Maybe (Context SrcSpanInfo)
mctxt DeclHead SrcSpanInfo
dh [QualConDecl SrcSpanInfo]
constrs [Deriving SrcSpanInfo]
mder -> do
DataOrNew SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactP DataOrNew SrcSpanInfo
dn
(Context SrcSpanInfo -> EP ())
-> Maybe (Context SrcSpanInfo) -> EP ()
forall a. (a -> EP ()) -> Maybe a -> EP ()
maybeEP Context SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Maybe (Context SrcSpanInfo)
mctxt
DeclHead SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC DeclHead SrcSpanInfo
dh
[(SrcSpan, [Char])] -> [QualConDecl SrcSpanInfo] -> EP ()
forall (ast :: * -> *) loc.
(ExactP ast, SrcInfo loc) =>
[(loc, [Char])] -> [ast SrcSpanInfo] -> EP ()
printInterleaved ([SrcSpan] -> [[Char]] -> [(SrcSpan, [Char])]
forall a b. [a] -> [b] -> [(a, b)]
zip (SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l) ([Char]
"="[Char] -> [[Char]] -> [[Char]]
forall a. a -> [a] -> [a]
: [Char] -> [[Char]]
forall a. a -> [a]
repeat [Char]
"|")) [QualConDecl SrcSpanInfo]
constrs
(Deriving SrcSpanInfo -> EP ()) -> [Deriving SrcSpanInfo] -> EP ()
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> m b) -> t a -> m ()
mapM_ Deriving SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC [Deriving SrcSpanInfo]
mder
GDataDecl SrcSpanInfo
l DataOrNew SrcSpanInfo
dn Maybe (Context SrcSpanInfo)
mctxt DeclHead SrcSpanInfo
dh Maybe (Type SrcSpanInfo)
mk [GadtDecl SrcSpanInfo]
gds [Deriving SrcSpanInfo]
mder -> do
let pts :: [SrcSpan]
pts = SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l
DataOrNew SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactP DataOrNew SrcSpanInfo
dn
(Context SrcSpanInfo -> EP ())
-> Maybe (Context SrcSpanInfo) -> EP ()
forall a. (a -> EP ()) -> Maybe a -> EP ()
maybeEP Context SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Maybe (Context SrcSpanInfo)
mctxt
DeclHead SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC DeclHead SrcSpanInfo
dh
pts1 <- case Maybe (Type SrcSpanInfo)
mk of
Maybe (Type SrcSpanInfo)
Nothing -> [SrcSpan] -> EP [SrcSpan]
forall a. a -> EP a
forall (m :: * -> *) a. Monad m => a -> m a
return [SrcSpan]
pts
Just Type SrcSpanInfo
kd -> case [SrcSpan]
pts of
SrcSpan
p:[SrcSpan]
pts' -> do
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
p) [Char]
"::"
Type SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Type SrcSpanInfo
kd
[SrcSpan] -> EP [SrcSpan]
forall a. a -> EP a
forall (m :: * -> *) a. Monad m => a -> m a
return [SrcSpan]
pts'
[SrcSpan]
_ -> [Char] -> EP [SrcSpan]
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: Decl: GDataDecl is given too few srcInfoPoints"
case pts1 of
SrcSpan
x:[SrcSpan]
pts' -> do
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
x) [Char]
"where"
[SrcSpan] -> [GadtDecl SrcSpanInfo] -> EP ()
forall (ast :: * -> *).
ExactP ast =>
[SrcSpan] -> [ast SrcSpanInfo] -> EP ()
layoutList [SrcSpan]
pts' [GadtDecl SrcSpanInfo]
gds
(Deriving SrcSpanInfo -> EP ()) -> [Deriving SrcSpanInfo] -> EP ()
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> m b) -> t a -> m ()
mapM_ Deriving SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC [Deriving SrcSpanInfo]
mder
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: Decl: GDataDecl is given too few srcInfoPoints"
DataFamDecl SrcSpanInfo
l Maybe (Context SrcSpanInfo)
mctxt DeclHead SrcSpanInfo
dh Maybe (ResultSig SrcSpanInfo)
mk -> do
[Char] -> EP ()
printString [Char]
"data"
(Context SrcSpanInfo -> EP ())
-> Maybe (Context SrcSpanInfo) -> EP ()
forall a. (a -> EP ()) -> Maybe a -> EP ()
maybeEP Context SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Maybe (Context SrcSpanInfo)
mctxt
DeclHead SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC DeclHead SrcSpanInfo
dh
(ResultSig SrcSpanInfo -> EP ())
-> Maybe (ResultSig SrcSpanInfo) -> EP ()
forall a. (a -> EP ()) -> Maybe a -> EP ()
maybeEP (\ResultSig SrcSpanInfo
kd -> (Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos ([SrcSpan] -> SrcSpan
forall a. HasCallStack => [a] -> a
head (SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l))) [Char]
"::" EP () -> EP () -> EP ()
forall a b. EP a -> EP b -> EP b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> ResultSig SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC ResultSig SrcSpanInfo
kd) Maybe (ResultSig SrcSpanInfo)
mk
TypeInsDecl SrcSpanInfo
l Type SrcSpanInfo
t1 Type SrcSpanInfo
t2 ->
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
[SrcSpan
_,SrcSpan
b,SrcSpan
c] -> do
[Char] -> EP ()
printString [Char]
"type"
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
b) [Char]
"instance"
Type SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Type SrcSpanInfo
t1
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
c) [Char]
"="
Type SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Type SrcSpanInfo
t2
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: Decl: TypeInsDecl is given wrong number of srcInfoPoints"
DataInsDecl SrcSpanInfo
l DataOrNew SrcSpanInfo
dn Type SrcSpanInfo
t [QualConDecl SrcSpanInfo]
constrs [Deriving SrcSpanInfo]
mder ->
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
SrcSpan
p:[SrcSpan]
pts -> do
DataOrNew SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactP DataOrNew SrcSpanInfo
dn
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
p) [Char]
"instance"
Type SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Type SrcSpanInfo
t
[(SrcSpan, [Char])] -> [QualConDecl SrcSpanInfo] -> EP ()
forall (ast :: * -> *) loc.
(ExactP ast, SrcInfo loc) =>
[(loc, [Char])] -> [ast SrcSpanInfo] -> EP ()
printInterleaved ([SrcSpan] -> [[Char]] -> [(SrcSpan, [Char])]
forall a b. [a] -> [b] -> [(a, b)]
zip [SrcSpan]
pts ([Char]
"="[Char] -> [[Char]] -> [[Char]]
forall a. a -> [a] -> [a]
: [Char] -> [[Char]]
forall a. a -> [a]
repeat [Char]
"|")) [QualConDecl SrcSpanInfo]
constrs
(Deriving SrcSpanInfo -> EP ()) -> [Deriving SrcSpanInfo] -> EP ()
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> m b) -> t a -> m ()
mapM_ Deriving SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC [Deriving SrcSpanInfo]
mder
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: Decl: DataInsDecl is given too few srcInfoPoints"
GDataInsDecl SrcSpanInfo
l DataOrNew SrcSpanInfo
dn Type SrcSpanInfo
t Maybe (Type SrcSpanInfo)
mk [GadtDecl SrcSpanInfo]
gds [Deriving SrcSpanInfo]
mder ->
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
SrcSpan
p:[SrcSpan]
pts -> do
DataOrNew SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactP DataOrNew SrcSpanInfo
dn
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
p) [Char]
"instance"
Type SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Type SrcSpanInfo
t
pts1 <- case Maybe (Type SrcSpanInfo)
mk of
Maybe (Type SrcSpanInfo)
Nothing -> [SrcSpan] -> EP [SrcSpan]
forall a. a -> EP a
forall (m :: * -> *) a. Monad m => a -> m a
return [SrcSpan]
pts
Just Type SrcSpanInfo
kd -> case [SrcSpan]
pts of
SrcSpan
p':[SrcSpan]
pts' -> do
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
p') [Char]
"::"
Type SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Type SrcSpanInfo
kd
[SrcSpan] -> EP [SrcSpan]
forall a. a -> EP a
forall (m :: * -> *) a. Monad m => a -> m a
return [SrcSpan]
pts'
[SrcSpan]
_ -> [Char] -> EP [SrcSpan]
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: Decl: GDataInsDecl is given too few srcInfoPoints"
case pts1 of
SrcSpan
x:[SrcSpan]
pts' -> do
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
x) [Char]
"where"
[SrcSpan] -> [GadtDecl SrcSpanInfo] -> EP ()
forall (ast :: * -> *).
ExactP ast =>
[SrcSpan] -> [ast SrcSpanInfo] -> EP ()
layoutList [SrcSpan]
pts' [GadtDecl SrcSpanInfo]
gds
(Deriving SrcSpanInfo -> EP ()) -> [Deriving SrcSpanInfo] -> EP ()
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> m b) -> t a -> m ()
mapM_ Deriving SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC [Deriving SrcSpanInfo]
mder
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: Decl: GDataInsDecl is given too few srcInfoPoints"
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: Decl: GDataInsDecl is given too few srcInfoPoints"
ClassDecl SrcSpanInfo
l Maybe (Context SrcSpanInfo)
mctxt DeclHead SrcSpanInfo
dh [FunDep SrcSpanInfo]
fds Maybe [ClassDecl SrcSpanInfo]
mcds ->
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
SrcSpan
_:[SrcSpan]
pts -> do
[Char] -> EP ()
printString [Char]
"class"
(Context SrcSpanInfo -> EP ())
-> Maybe (Context SrcSpanInfo) -> EP ()
forall a. (a -> EP ()) -> Maybe a -> EP ()
maybeEP Context SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Maybe (Context SrcSpanInfo)
mctxt
DeclHead SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC DeclHead SrcSpanInfo
dh
_ <- case [FunDep SrcSpanInfo]
fds of
[] -> [SrcSpan] -> EP [SrcSpan]
forall a. a -> EP a
forall (m :: * -> *) a. Monad m => a -> m a
return [SrcSpan]
pts
[FunDep SrcSpanInfo]
_ -> do
let ([SrcSpan]
pts1, [SrcSpan]
pts2) = Int -> [SrcSpan] -> ([SrcSpan], [SrcSpan])
forall a. Int -> [a] -> ([a], [a])
splitAt ([FunDep SrcSpanInfo] -> Int
forall a. [a] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [FunDep SrcSpanInfo]
fds) [SrcSpan]
pts
[(SrcSpan, [Char])] -> [FunDep SrcSpanInfo] -> EP ()
forall (ast :: * -> *) loc.
(ExactP ast, SrcInfo loc) =>
[(loc, [Char])] -> [ast SrcSpanInfo] -> EP ()
printInterleaved ([SrcSpan] -> [[Char]] -> [(SrcSpan, [Char])]
forall a b. [a] -> [b] -> [(a, b)]
zip [SrcSpan]
pts1 ([Char]
"|"[Char] -> [[Char]] -> [[Char]]
forall a. a -> [a] -> [a]
:[Char] -> [[Char]]
forall a. a -> [a]
repeat [Char]
",")) [FunDep SrcSpanInfo]
fds
[SrcSpan] -> EP [SrcSpan]
forall a. a -> EP a
forall (m :: * -> *) a. Monad m => a -> m a
return [SrcSpan]
pts2
maybeEP (\[ClassDecl SrcSpanInfo]
cds ->
case [SrcSpan]
pts of
SrcSpan
p:[SrcSpan]
pts' -> do
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
p) [Char]
"where"
[SrcSpan] -> [ClassDecl SrcSpanInfo] -> EP ()
forall (ast :: * -> *).
ExactP ast =>
[SrcSpan] -> [ast SrcSpanInfo] -> EP ()
layoutList [SrcSpan]
pts' ([ClassDecl SrcSpanInfo] -> EP ())
-> [ClassDecl SrcSpanInfo] -> EP ()
forall a b. (a -> b) -> a -> b
$ [ClassDecl SrcSpanInfo] -> [ClassDecl SrcSpanInfo]
sepClassFunBinds [ClassDecl SrcSpanInfo]
cds
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: Decl: ClassDecl is given too few srcInfoPoints"
) mcds
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: Decl: ClassDecl is given too few srcInfoPoints"
InstDecl SrcSpanInfo
l Maybe (Overlap SrcSpanInfo)
movlp InstRule SrcSpanInfo
ih Maybe [InstDecl SrcSpanInfo]
mids ->
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
SrcSpan
_:[SrcSpan]
pts -> do
[Char] -> EP ()
printString [Char]
"instance"
(Overlap SrcSpanInfo -> EP ())
-> Maybe (Overlap SrcSpanInfo) -> EP ()
forall a. (a -> EP ()) -> Maybe a -> EP ()
maybeEP Overlap SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Maybe (Overlap SrcSpanInfo)
movlp
InstRule SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC InstRule SrcSpanInfo
ih
([InstDecl SrcSpanInfo] -> EP ())
-> Maybe [InstDecl SrcSpanInfo] -> EP ()
forall a. (a -> EP ()) -> Maybe a -> EP ()
maybeEP (\[InstDecl SrcSpanInfo]
ids -> do
let (SrcSpan
p:[SrcSpan]
pts') = [SrcSpan]
pts
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
p) [Char]
"where"
[SrcSpan] -> [InstDecl SrcSpanInfo] -> EP ()
forall (ast :: * -> *).
ExactP ast =>
[SrcSpan] -> [ast SrcSpanInfo] -> EP ()
layoutList [SrcSpan]
pts' ([InstDecl SrcSpanInfo] -> EP ())
-> [InstDecl SrcSpanInfo] -> EP ()
forall a b. (a -> b) -> a -> b
$ [InstDecl SrcSpanInfo] -> [InstDecl SrcSpanInfo]
sepInstFunBinds [InstDecl SrcSpanInfo]
ids
) Maybe [InstDecl SrcSpanInfo]
mids
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: Decl: InstDecl is given too few srcInfoPoints"
DerivDecl SrcSpanInfo
l Maybe (DerivStrategy SrcSpanInfo)
mds Maybe (Overlap SrcSpanInfo)
movlp InstRule SrcSpanInfo
ih ->
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
[SrcSpan
_,SrcSpan
b] -> do
[Char] -> EP ()
printString [Char]
"deriving"
(DerivStrategy SrcSpanInfo -> EP ())
-> Maybe (DerivStrategy SrcSpanInfo) -> EP ()
forall a. (a -> EP ()) -> Maybe a -> EP ()
maybeEP DerivStrategy SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Maybe (DerivStrategy SrcSpanInfo)
mds
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
b) [Char]
"instance"
(Overlap SrcSpanInfo -> EP ())
-> Maybe (Overlap SrcSpanInfo) -> EP ()
forall a. (a -> EP ()) -> Maybe a -> EP ()
maybeEP Overlap SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Maybe (Overlap SrcSpanInfo)
movlp
InstRule SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC InstRule SrcSpanInfo
ih
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: Decl: DerivDecl is given wrong number of srcInfoPoints"
InfixDecl SrcSpanInfo
l Assoc SrcSpanInfo
assoc Maybe Int
mprec [Op SrcSpanInfo]
ops -> do
let pts :: [SrcSpan]
pts = SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l
Assoc SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactP Assoc SrcSpanInfo
assoc
pts1 <- case Maybe Int
mprec of
Maybe Int
Nothing -> [SrcSpan] -> EP [SrcSpan]
forall a. a -> EP a
forall (m :: * -> *) a. Monad m => a -> m a
return [SrcSpan]
pts
Just Int
prec ->
case [SrcSpan]
pts of
SrcSpan
p:[SrcSpan]
pts' -> do
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
p) (Int -> [Char]
forall a. Show a => a -> [Char]
show Int
prec)
[SrcSpan] -> EP [SrcSpan]
forall a. a -> EP a
forall (m :: * -> *) a. Monad m => a -> m a
return [SrcSpan]
pts'
[SrcSpan]
_ -> [Char] -> EP [SrcSpan]
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: Decl: InfixDecl is given too few srcInfoPoints"
printInterleaved' (zip pts1 (repeat ",")) ops
DefaultDecl SrcSpanInfo
l [Type SrcSpanInfo]
ts ->
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
SrcSpan
_:[SrcSpan]
pts -> do
[Char] -> EP ()
printString [Char]
"default"
[(SrcSpan, [Char])] -> [Type SrcSpanInfo] -> EP ()
forall (ast :: * -> *) loc.
(ExactP ast, SrcInfo loc) =>
[(loc, [Char])] -> [ast SrcSpanInfo] -> EP ()
printInterleaved ([SrcSpan] -> [[Char]] -> [(SrcSpan, [Char])]
forall a b. [a] -> [b] -> [(a, b)]
zip ([SrcSpan] -> [SrcSpan]
forall a. HasCallStack => [a] -> [a]
init [SrcSpan]
pts) ([Char]
"("[Char] -> [[Char]] -> [[Char]]
forall a. a -> [a] -> [a]
:[Char] -> [[Char]]
forall a. a -> [a]
repeat [Char]
",")) [Type SrcSpanInfo]
ts
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos ([SrcSpan] -> SrcSpan
forall a. HasCallStack => [a] -> a
last [SrcSpan]
pts)) [Char]
")"
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: Decl: DefaultDecl is given too few srcInfoPoints"
SpliceDecl SrcSpanInfo
_ Exp SrcSpanInfo
spl -> Exp SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactP Exp SrcSpanInfo
spl
TSpliceDecl SrcSpanInfo
_ Exp SrcSpanInfo
spl -> Exp SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactP Exp SrcSpanInfo
spl
TypeSig SrcSpanInfo
l [Name SrcSpanInfo]
ns Type SrcSpanInfo
t -> do
let pts :: [SrcSpan]
pts = SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l
[(SrcSpan, [Char])] -> [Name SrcSpanInfo] -> EP ()
forall (ast :: * -> *) loc.
(ExactP ast, SrcInfo loc) =>
[(loc, [Char])] -> [ast SrcSpanInfo] -> EP ()
printInterleaved' ([SrcSpan] -> [[Char]] -> [(SrcSpan, [Char])]
forall a b. [a] -> [b] -> [(a, b)]
zip [SrcSpan]
pts (Int -> [Char] -> [[Char]]
forall a. Int -> a -> [a]
replicate ([SrcSpan] -> Int
forall a. [a] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [SrcSpan]
pts Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
1) [Char]
"," [[Char]] -> [[Char]] -> [[Char]]
forall a. [a] -> [a] -> [a]
++ [[Char]
"::"])) [Name SrcSpanInfo]
ns
Type SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Type SrcSpanInfo
t
PatSynSig SrcSpanInfo
l [Name SrcSpanInfo]
ns Maybe [TyVarBind SrcSpanInfo]
dh Maybe (Context SrcSpanInfo)
c1 Maybe [TyVarBind SrcSpanInfo]
_ Maybe (Context SrcSpanInfo)
c2 Type SrcSpanInfo
t -> do
let (SrcSpan
pat:[SrcSpan]
pts) = SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
pat) [Char]
"pattern"
[(SrcSpan, [Char])] -> [Name SrcSpanInfo] -> EP ()
forall (ast :: * -> *) loc.
(ExactP ast, SrcInfo loc) =>
[(loc, [Char])] -> [ast SrcSpanInfo] -> EP ()
printInterleaved' ([SrcSpan] -> [[Char]] -> [(SrcSpan, [Char])]
forall a b. [a] -> [b] -> [(a, b)]
zip [SrcSpan]
pts (Int -> [Char] -> [[Char]]
forall a. Int -> a -> [a]
replicate ([Name SrcSpanInfo] -> Int
forall a. [a] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [Name SrcSpanInfo]
ns Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
1) [Char]
"," [[Char]] -> [[Char]] -> [[Char]]
forall a. [a] -> [a] -> [a]
++ [[Char]
"::"])) [Name SrcSpanInfo]
ns
case Maybe [TyVarBind SrcSpanInfo]
dh of
Maybe [TyVarBind SrcSpanInfo]
Nothing -> () -> EP ()
forall a. a -> EP a
forall (m :: * -> *) a. Monad m => a -> m a
return ()
Just [TyVarBind SrcSpanInfo]
tvs ->
case Int -> [SrcSpan] -> [SrcSpan]
forall a. Int -> [a] -> [a]
drop ([Name SrcSpanInfo] -> Int
forall a. [a] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [Name SrcSpanInfo]
ns) [SrcSpan]
pts of
(SrcSpan
a:SrcSpan
b:[SrcSpan]
_) -> do
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
a) [Char]
"forall"
(TyVarBind SrcSpanInfo -> EP ())
-> [TyVarBind SrcSpanInfo] -> EP ()
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> m b) -> t a -> m ()
mapM_ TyVarBind SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC [TyVarBind SrcSpanInfo]
tvs
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
b) [Char]
"."
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP ([Char]
"ExactP: Decl: PatSynSig: Forall: is given too few srcInfoPoints" [Char] -> ShowS
forall a. [a] -> [a] -> [a]
++ [SrcSpan] -> [Char]
forall a. Show a => a -> [Char]
show [SrcSpan]
pts [Char] -> ShowS
forall a. [a] -> [a] -> [a]
++ [SrcSpan] -> [Char]
forall a. Show a => a -> [Char]
show (Int -> [SrcSpan] -> [SrcSpan]
forall a. Int -> [a] -> [a]
drop ([Name SrcSpanInfo] -> Int
forall a. [a] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [Name SrcSpanInfo]
ns Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
1) [SrcSpan]
pts))
(Context SrcSpanInfo -> EP ())
-> Maybe (Context SrcSpanInfo) -> EP ()
forall a. (a -> EP ()) -> Maybe a -> EP ()
maybeEP Context SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Maybe (Context SrcSpanInfo)
c1
(Context SrcSpanInfo -> EP ())
-> Maybe (Context SrcSpanInfo) -> EP ()
forall a. (a -> EP ()) -> Maybe a -> EP ()
maybeEP Context SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Maybe (Context SrcSpanInfo)
c2
Type SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Type SrcSpanInfo
t
FunBind SrcSpanInfo
_ [Match SrcSpanInfo]
ms -> (Match SrcSpanInfo -> EP ()) -> [Match SrcSpanInfo] -> EP ()
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> m b) -> t a -> m ()
mapM_ Match SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC [Match SrcSpanInfo]
ms
PatBind SrcSpanInfo
l Pat SrcSpanInfo
p Rhs SrcSpanInfo
rhs Maybe (Binds SrcSpanInfo)
mbs -> do
let pts :: [SrcSpan]
pts = SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l
Pat SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactP Pat SrcSpanInfo
p
Rhs SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Rhs SrcSpanInfo
rhs
(Binds SrcSpanInfo -> EP ()) -> Maybe (Binds SrcSpanInfo) -> EP ()
forall a. (a -> EP ()) -> Maybe a -> EP ()
maybeEP (\Binds SrcSpanInfo
bs -> (Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos ([SrcSpan] -> SrcSpan
forall a. HasCallStack => [a] -> a
head [SrcSpan]
pts)) [Char]
"where" EP () -> EP () -> EP ()
forall a b. EP a -> EP b -> EP b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> Binds SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Binds SrcSpanInfo
bs) Maybe (Binds SrcSpanInfo)
mbs
PatSyn SrcSpanInfo
l Pat SrcSpanInfo
lhs Pat SrcSpanInfo
rhs PatternSynDirection SrcSpanInfo
dir ->
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
[SrcSpan
pat,SrcSpan
sepPos] -> do
let sep :: [Char]
sep = case PatternSynDirection SrcSpanInfo
dir of
PatternSynDirection SrcSpanInfo
ImplicitBidirectional -> [Char]
"="
ExplicitBidirectional SrcSpanInfo
_ [Decl SrcSpanInfo]
_ -> [Char]
"<-"
PatternSynDirection SrcSpanInfo
Unidirectional -> [Char]
"<-"
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
pat) [Char]
"pattern"
Pat SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Pat SrcSpanInfo
lhs
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
sepPos) [Char]
sep
Pat SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Pat SrcSpanInfo
rhs
case PatternSynDirection SrcSpanInfo
dir of
ExplicitBidirectional SrcSpanInfo
bl [Decl SrcSpanInfo]
ds -> do
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
bl of
(SrcSpan
w:[SrcSpan]
pts) -> do
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
w) [Char]
"where"
[SrcSpan] -> [Decl SrcSpanInfo] -> EP ()
forall (ast :: * -> *).
ExactP ast =>
[SrcSpan] -> [ast SrcSpanInfo] -> EP ()
layoutList [SrcSpan]
pts [Decl SrcSpanInfo]
ds
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: Decl: PaySyn: ExplicitBidirectional is given too few srcInfoPoints"
PatternSynDirection SrcSpanInfo
_ -> () -> EP ()
forall a. a -> EP a
forall (m :: * -> *) a. Monad m => a -> m a
return ()
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: Decl: PatSyn is given too few srcInfoPoints"
ForImp SrcSpanInfo
l CallConv SrcSpanInfo
cc Maybe (Safety SrcSpanInfo)
msf Maybe [Char]
mstr Name SrcSpanInfo
n Type SrcSpanInfo
t ->
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
SrcSpan
_:SrcSpan
b:[SrcSpan]
pts -> do
[Char] -> EP ()
printString [Char]
"foreign"
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
b) [Char]
"import"
CallConv SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC CallConv SrcSpanInfo
cc
(Safety SrcSpanInfo -> EP ())
-> Maybe (Safety SrcSpanInfo) -> EP ()
forall a. (a -> EP ()) -> Maybe a -> EP ()
maybeEP Safety SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Maybe (Safety SrcSpanInfo)
msf
pts1 <- case Maybe [Char]
mstr of
Maybe [Char]
Nothing -> [SrcSpan] -> EP [SrcSpan]
forall a. a -> EP a
forall (m :: * -> *) a. Monad m => a -> m a
return [SrcSpan]
pts
Just [Char]
str -> case [SrcSpan]
pts of
SrcSpan
x:[SrcSpan]
pts' -> do
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
x) (ShowS
forall a. Show a => a -> [Char]
show [Char]
str)
[SrcSpan] -> EP [SrcSpan]
forall a. a -> EP a
forall (m :: * -> *) a. Monad m => a -> m a
return [SrcSpan]
pts'
[SrcSpan]
_ -> [Char] -> EP [SrcSpan]
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: Decl: ForImp is given too few srcInfoPoints"
case pts1 of
SrcSpan
y:[SrcSpan]
_ -> do
Name SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Name SrcSpanInfo
n
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
y) [Char]
"::"
Type SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Type SrcSpanInfo
t
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: Decl: ForImp is given too few srcInfoPoints"
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: Decl: ForImp is given too few srcInfoPoints"
ForExp SrcSpanInfo
l CallConv SrcSpanInfo
cc Maybe [Char]
mstr Name SrcSpanInfo
n Type SrcSpanInfo
t ->
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
SrcSpan
_:SrcSpan
b:[SrcSpan]
pts -> do
[Char] -> EP ()
printString [Char]
"foreign"
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
b) [Char]
"export"
CallConv SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC CallConv SrcSpanInfo
cc
pts1 <- case Maybe [Char]
mstr of
Maybe [Char]
Nothing -> [SrcSpan] -> EP [SrcSpan]
forall a. a -> EP a
forall (m :: * -> *) a. Monad m => a -> m a
return [SrcSpan]
pts
Just [Char]
str -> case [SrcSpan]
pts of
SrcSpan
x:[SrcSpan]
pts' -> do
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
x) (ShowS
forall a. Show a => a -> [Char]
show [Char]
str)
[SrcSpan] -> EP [SrcSpan]
forall a. a -> EP a
forall (m :: * -> *) a. Monad m => a -> m a
return [SrcSpan]
pts'
[SrcSpan]
_ -> [Char] -> EP [SrcSpan]
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: Decl: ForExp is given too few srcInfoPoints"
case pts1 of
SrcSpan
y:[SrcSpan]
_ -> do
Name SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Name SrcSpanInfo
n
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
y) [Char]
"::"
Type SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Type SrcSpanInfo
t
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: Decl: ForExp is given too few srcInfoPoints"
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: Decl: ForExp is given too few srcInfoPoints"
RulePragmaDecl SrcSpanInfo
l [Rule SrcSpanInfo]
rs ->
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
[SrcSpan
_,SrcSpan
b] -> do
[Char] -> EP ()
printString [Char]
"{-# RULES"
(Rule SrcSpanInfo -> EP ()) -> [Rule SrcSpanInfo] -> EP ()
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> m b) -> t a -> m ()
mapM_ Rule SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC [Rule SrcSpanInfo]
rs
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
b) [Char]
"#-}"
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: Decl: RulePragmaDecl is given too few srcInfoPoints"
DeprPragmaDecl SrcSpanInfo
l [([Name SrcSpanInfo], [Char])]
nstrs ->
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
SrcSpan
_:[SrcSpan]
pts -> do
[Char] -> EP ()
printString [Char]
"{-# DEPRECATED"
[(Int, Int)] -> [([Name SrcSpanInfo], [Char])] -> EP ()
printWarndeprs ((SrcSpan -> (Int, Int)) -> [SrcSpan] -> [(Int, Int)]
forall a b. (a -> b) -> [a] -> [b]
map SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos ([SrcSpan] -> [SrcSpan]
forall a. HasCallStack => [a] -> [a]
init [SrcSpan]
pts)) [([Name SrcSpanInfo], [Char])]
nstrs
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos ([SrcSpan] -> SrcSpan
forall a. HasCallStack => [a] -> a
last [SrcSpan]
pts)) [Char]
"#-}"
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: Decl: DeprPragmaDecl is given too few srcInfoPoints"
WarnPragmaDecl SrcSpanInfo
l [([Name SrcSpanInfo], [Char])]
nstrs ->
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
SrcSpan
_:[SrcSpan]
pts -> do
[Char] -> EP ()
printString [Char]
"{-# WARNING"
[(Int, Int)] -> [([Name SrcSpanInfo], [Char])] -> EP ()
printWarndeprs ((SrcSpan -> (Int, Int)) -> [SrcSpan] -> [(Int, Int)]
forall a b. (a -> b) -> [a] -> [b]
map SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos ([SrcSpan] -> [SrcSpan]
forall a. HasCallStack => [a] -> [a]
init [SrcSpan]
pts)) [([Name SrcSpanInfo], [Char])]
nstrs
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos ([SrcSpan] -> SrcSpan
forall a. HasCallStack => [a] -> a
last [SrcSpan]
pts)) [Char]
"#-}"
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: Decl: WarnPragmaDecl is given too few srcInfoPoints"
InlineSig SrcSpanInfo
l Bool
inl Maybe (Activation SrcSpanInfo)
mact QName SrcSpanInfo
qn ->
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
[SrcSpan
_,SrcSpan
b] -> do
[Char] -> EP ()
printString ([Char] -> EP ()) -> [Char] -> EP ()
forall a b. (a -> b) -> a -> b
$ if Bool
inl then [Char]
"{-# INLINE" else [Char]
"{-# NOINLINE"
(Activation SrcSpanInfo -> EP ())
-> Maybe (Activation SrcSpanInfo) -> EP ()
forall a. (a -> EP ()) -> Maybe a -> EP ()
maybeEP Activation SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Maybe (Activation SrcSpanInfo)
mact
QName SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC QName SrcSpanInfo
qn
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
b) [Char]
"#-}"
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: Decl: InlineSig is given wrong number of srcInfoPoints"
InlineConlikeSig SrcSpanInfo
l Maybe (Activation SrcSpanInfo)
mact QName SrcSpanInfo
qn ->
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
[SrcSpan
_,SrcSpan
b] -> do
[Char] -> EP ()
printString [Char]
"{-# INLINE CONLIKE"
(Activation SrcSpanInfo -> EP ())
-> Maybe (Activation SrcSpanInfo) -> EP ()
forall a. (a -> EP ()) -> Maybe a -> EP ()
maybeEP Activation SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Maybe (Activation SrcSpanInfo)
mact
QName SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC QName SrcSpanInfo
qn
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
b) [Char]
"#-}"
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: Decl: InlineConlikeSig is given wrong number of srcInfoPoints"
SpecSig SrcSpanInfo
l Maybe (Activation SrcSpanInfo)
mact QName SrcSpanInfo
qn [Type SrcSpanInfo]
ts ->
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
SrcSpan
_:[SrcSpan]
pts -> do
[Char] -> EP ()
printString [Char]
"{-# SPECIALISE"
(Activation SrcSpanInfo -> EP ())
-> Maybe (Activation SrcSpanInfo) -> EP ()
forall a. (a -> EP ()) -> Maybe a -> EP ()
maybeEP Activation SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Maybe (Activation SrcSpanInfo)
mact
QName SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC QName SrcSpanInfo
qn
[(SrcSpan, [Char])] -> [Type SrcSpanInfo] -> EP ()
forall (ast :: * -> *) loc.
(ExactP ast, SrcInfo loc) =>
[(loc, [Char])] -> [ast SrcSpanInfo] -> EP ()
printInterleaved ([SrcSpan] -> [[Char]] -> [(SrcSpan, [Char])]
forall a b. [a] -> [b] -> [(a, b)]
zip [SrcSpan]
pts ([Char]
"::" [Char] -> [[Char]] -> [[Char]]
forall a. a -> [a] -> [a]
: Int -> [Char] -> [[Char]]
forall a. Int -> a -> [a]
replicate ([SrcSpan] -> Int
forall a. [a] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [SrcSpan]
pts Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
2) [Char]
"," [[Char]] -> [[Char]] -> [[Char]]
forall a. [a] -> [a] -> [a]
++ [[Char]
"#-}"])) [Type SrcSpanInfo]
ts
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: Decl: SpecSig is given too few srcInfoPoints"
SpecInlineSig SrcSpanInfo
l Bool
b Maybe (Activation SrcSpanInfo)
mact QName SrcSpanInfo
qn [Type SrcSpanInfo]
ts ->
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
SrcSpan
_:[SrcSpan]
pts -> do
[Char] -> EP ()
printString ([Char] -> EP ()) -> [Char] -> EP ()
forall a b. (a -> b) -> a -> b
$ [Char]
"{-# SPECIALISE " [Char] -> ShowS
forall a. [a] -> [a] -> [a]
++ if Bool
b then [Char]
"INLINE" else [Char]
"NOINLINE"
(Activation SrcSpanInfo -> EP ())
-> Maybe (Activation SrcSpanInfo) -> EP ()
forall a. (a -> EP ()) -> Maybe a -> EP ()
maybeEP Activation SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Maybe (Activation SrcSpanInfo)
mact
QName SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC QName SrcSpanInfo
qn
[(SrcSpan, [Char])] -> [Type SrcSpanInfo] -> EP ()
forall (ast :: * -> *) loc.
(ExactP ast, SrcInfo loc) =>
[(loc, [Char])] -> [ast SrcSpanInfo] -> EP ()
printInterleaved ([SrcSpan] -> [[Char]] -> [(SrcSpan, [Char])]
forall a b. [a] -> [b] -> [(a, b)]
zip [SrcSpan]
pts ([Char]
"::" [Char] -> [[Char]] -> [[Char]]
forall a. a -> [a] -> [a]
: Int -> [Char] -> [[Char]]
forall a. Int -> a -> [a]
replicate ([SrcSpan] -> Int
forall a. [a] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [SrcSpan]
pts Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
2) [Char]
"," [[Char]] -> [[Char]] -> [[Char]]
forall a. [a] -> [a] -> [a]
++ [[Char]
"#-}"])) [Type SrcSpanInfo]
ts
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: Decl: SpecInlineSig is given too few srcInfoPoints"
InstSig SrcSpanInfo
l InstRule SrcSpanInfo
ih ->
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
[SrcSpan
_,SrcSpan
b,SrcSpan
c] -> do
[Char] -> EP ()
printString [Char]
"{-# SPECIALISE"
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
b) [Char]
"instance"
InstRule SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC InstRule SrcSpanInfo
ih
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
c) [Char]
"#-}"
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: Decl: InstSig is given wrong number of srcInfoPoints"
AnnPragma SrcSpanInfo
l Annotation SrcSpanInfo
ann' ->
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
[SrcSpan
_,SrcSpan
b] -> do
[Char] -> EP ()
printString [Char]
"{-# ANN"
Annotation SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Annotation SrcSpanInfo
ann'
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
b) [Char]
"#-}"
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: Decl: AnnPragma is given wrong number of srcInfoPoints"
MinimalPragma SrcSpanInfo
l Maybe (BooleanFormula SrcSpanInfo)
b ->
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
[SrcSpan
_,SrcSpan
b'] -> do
[Char] -> EP ()
printString [Char]
"{-# MINIMAL"
(BooleanFormula SrcSpanInfo -> EP ())
-> Maybe (BooleanFormula SrcSpanInfo) -> EP ()
forall a. (a -> EP ()) -> Maybe a -> EP ()
maybeEP BooleanFormula SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Maybe (BooleanFormula SrcSpanInfo)
b
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
b') [Char]
"#-}"
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: Decl: MinimalPragma is given wrong number of srcInfoPoints"
RoleAnnotDecl SrcSpanInfo
l QName SrcSpanInfo
ty [Role SrcSpanInfo]
roles ->
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
(SrcSpan
t:SrcSpan
r:[SrcSpan]
_) -> do
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
t) [Char]
"type"
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
r) [Char]
"role"
QName SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC QName SrcSpanInfo
ty
(Role SrcSpanInfo -> EP ()) -> [Role SrcSpanInfo] -> EP ()
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> m b) -> t a -> m ()
mapM_ Role SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC [Role SrcSpanInfo]
roles
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: Decl: RoleAnnotDecl is given wrong number of srcInfoPoints"
CompletePragma SrcSpanInfo
l [Name SrcSpanInfo]
cls Maybe (QName SrcSpanInfo)
opt_ts ->
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
(SrcSpan
t:[SrcSpan]
rs) -> do
let ([SrcSpan]
cls_s, [SrcSpan]
rs') = Int -> [SrcSpan] -> ([SrcSpan], [SrcSpan])
forall a. Int -> [a] -> ([a], [a])
splitAt ([Name SrcSpanInfo] -> Int
forall a. [a] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [Name SrcSpanInfo]
cls Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
1) [SrcSpan]
rs
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
t)[Char]
"{-# COMPLETE"
[(SrcSpan, [Char])] -> [Name SrcSpanInfo] -> EP ()
forall (ast :: * -> *) loc.
(ExactP ast, SrcInfo loc) =>
[(loc, [Char])] -> [ast SrcSpanInfo] -> EP ()
printInterleaved' ([SrcSpan] -> [[Char]] -> [(SrcSpan, [Char])]
forall a b. [a] -> [b] -> [(a, b)]
zip [SrcSpan]
cls_s ([Char] -> [[Char]]
forall a. a -> [a]
repeat [Char]
",")) [Name SrcSpanInfo]
cls
case ([SrcSpan]
rs', Maybe (QName SrcSpanInfo)
opt_ts) of
((SrcSpan
opt_dcolon: SrcSpan
end:[SrcSpan]
_), Just QName SrcSpanInfo
tc) -> do
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
opt_dcolon) [Char]
"::"
QName SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC QName SrcSpanInfo
tc
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
end) [Char]
"#-}"
([SrcSpan
end], Maybe (QName SrcSpanInfo)
Nothing) -> (Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
end) [Char]
"#-}"
([SrcSpan], Maybe (QName SrcSpanInfo))
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: Decl: CompletePragma is given wrong number of srcInfoPoints"
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: Decl: CompletePragma is given wrong number of srcInfoPoints"
instance ExactP Role where
exactP :: Role SrcSpanInfo -> EP ()
exactP Role SrcSpanInfo
r =
case Role SrcSpanInfo
r of
RoleWildcard SrcSpanInfo
l -> (Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpanInfo -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpanInfo
l) [Char]
"_"
Representational SrcSpanInfo
l -> (Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpanInfo -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpanInfo
l) [Char]
"representational"
Phantom SrcSpanInfo
l -> (Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpanInfo -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpanInfo
l) [Char]
"phantom"
Nominal SrcSpanInfo
l -> (Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpanInfo -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpanInfo
l) [Char]
"nominal"
instance ExactP Annotation where
exactP :: Annotation SrcSpanInfo -> EP ()
exactP Annotation SrcSpanInfo
ann' = case Annotation SrcSpanInfo
ann' of
Ann SrcSpanInfo
_ Name SrcSpanInfo
n Exp SrcSpanInfo
e -> do
Name SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactP Name SrcSpanInfo
n
Exp SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Exp SrcSpanInfo
e
TypeAnn SrcSpanInfo
_ Name SrcSpanInfo
n Exp SrcSpanInfo
e -> do
[Char] -> EP ()
printString [Char]
"type"
Name SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Name SrcSpanInfo
n
Exp SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Exp SrcSpanInfo
e
ModuleAnn SrcSpanInfo
_ Exp SrcSpanInfo
e -> do
[Char] -> EP ()
printString [Char]
"module"
Exp SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Exp SrcSpanInfo
e
instance ExactP BooleanFormula where
exactP :: BooleanFormula SrcSpanInfo -> EP ()
exactP BooleanFormula SrcSpanInfo
b' = case BooleanFormula SrcSpanInfo
b' of
VarFormula SrcSpanInfo
_ Name SrcSpanInfo
n -> Name SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Name SrcSpanInfo
n
AndFormula SrcSpanInfo
l [BooleanFormula SrcSpanInfo]
bs ->
let pts :: [SrcSpan]
pts = SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l
in [((Int, Int), EP ())] -> [((Int, Int), EP ())] -> EP ()
printStreams ([(Int, Int)] -> [EP ()] -> [((Int, Int), EP ())]
forall a b. [a] -> [b] -> [(a, b)]
zip ((SrcSpan -> (Int, Int)) -> [SrcSpan] -> [(Int, Int)]
forall a b. (a -> b) -> [a] -> [b]
map SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos [SrcSpan]
pts) (EP () -> [EP ()]
forall a. a -> [a]
repeat (EP () -> [EP ()]) -> EP () -> [EP ()]
forall a b. (a -> b) -> a -> b
$ [Char] -> EP ()
printString [Char]
",")) ((BooleanFormula SrcSpanInfo -> ((Int, Int), EP ()))
-> [BooleanFormula SrcSpanInfo] -> [((Int, Int), EP ())]
forall a b. (a -> b) -> [a] -> [b]
map (SrcSpanInfo -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos (SrcSpanInfo -> (Int, Int))
-> (BooleanFormula SrcSpanInfo -> SrcSpanInfo)
-> BooleanFormula SrcSpanInfo
-> (Int, Int)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. BooleanFormula SrcSpanInfo -> SrcSpanInfo
forall l. BooleanFormula l -> l
forall (ast :: * -> *) l. Annotated ast => ast l -> l
ann (BooleanFormula SrcSpanInfo -> (Int, Int))
-> (BooleanFormula SrcSpanInfo -> EP ())
-> BooleanFormula SrcSpanInfo
-> ((Int, Int), EP ())
forall b c c'. (b -> c) -> (b -> c') -> b -> (c, c')
forall (a :: * -> * -> *) b c c'.
Arrow a =>
a b c -> a b c' -> a b (c, c')
&&& BooleanFormula SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC) [BooleanFormula SrcSpanInfo]
bs)
OrFormula SrcSpanInfo
l [BooleanFormula SrcSpanInfo]
bs ->
let pts :: [SrcSpan]
pts = SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l
in [((Int, Int), EP ())] -> [((Int, Int), EP ())] -> EP ()
printStreams ([(Int, Int)] -> [EP ()] -> [((Int, Int), EP ())]
forall a b. [a] -> [b] -> [(a, b)]
zip ((SrcSpan -> (Int, Int)) -> [SrcSpan] -> [(Int, Int)]
forall a b. (a -> b) -> [a] -> [b]
map SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos [SrcSpan]
pts) (EP () -> [EP ()]
forall a. a -> [a]
repeat (EP () -> [EP ()]) -> EP () -> [EP ()]
forall a b. (a -> b) -> a -> b
$ [Char] -> EP ()
printString [Char]
"|")) ((BooleanFormula SrcSpanInfo -> ((Int, Int), EP ()))
-> [BooleanFormula SrcSpanInfo] -> [((Int, Int), EP ())]
forall a b. (a -> b) -> [a] -> [b]
map (SrcSpanInfo -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos (SrcSpanInfo -> (Int, Int))
-> (BooleanFormula SrcSpanInfo -> SrcSpanInfo)
-> BooleanFormula SrcSpanInfo
-> (Int, Int)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. BooleanFormula SrcSpanInfo -> SrcSpanInfo
forall l. BooleanFormula l -> l
forall (ast :: * -> *) l. Annotated ast => ast l -> l
ann (BooleanFormula SrcSpanInfo -> (Int, Int))
-> (BooleanFormula SrcSpanInfo -> EP ())
-> BooleanFormula SrcSpanInfo
-> ((Int, Int), EP ())
forall b c c'. (b -> c) -> (b -> c') -> b -> (c, c')
forall (a :: * -> * -> *) b c c'.
Arrow a =>
a b c -> a b c' -> a b (c, c')
&&& BooleanFormula SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC) [BooleanFormula SrcSpanInfo]
bs)
ParenFormula SrcSpanInfo
l BooleanFormula SrcSpanInfo
b ->
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
[SrcSpan
a'',SrcSpan
b''] -> (Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
a'') [Char]
"(" EP () -> EP () -> EP ()
forall a b. EP a -> EP b -> EP b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> BooleanFormula SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC BooleanFormula SrcSpanInfo
b EP () -> EP () -> EP ()
forall a b. EP a -> EP b -> EP b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> (Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
b'') [Char]
")"
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: BooleanFormula: ParenFormula is given wrong number of srcInfoPoints"
printWarndeprs :: [Pos] -> [([Name SrcSpanInfo], String)] -> EP ()
printWarndeprs :: [(Int, Int)] -> [([Name SrcSpanInfo], [Char])] -> EP ()
printWarndeprs [(Int, Int)]
_ [] = () -> EP ()
forall a. a -> EP a
forall (m :: * -> *) a. Monad m => a -> m a
return ()
printWarndeprs [(Int, Int)]
ps' (([Name SrcSpanInfo]
ns',[Char]
str'):[([Name SrcSpanInfo], [Char])]
nsts') = [(Int, Int)]
-> [Name SrcSpanInfo]
-> [Char]
-> [([Name SrcSpanInfo], [Char])]
-> EP ()
printWd [(Int, Int)]
ps' [Name SrcSpanInfo]
ns' [Char]
str' [([Name SrcSpanInfo], [Char])]
nsts'
where printWd :: [Pos] -> [Name SrcSpanInfo] -> String -> [([Name SrcSpanInfo], String)] -> EP ()
printWd :: [(Int, Int)]
-> [Name SrcSpanInfo]
-> [Char]
-> [([Name SrcSpanInfo], [Char])]
-> EP ()
printWd ((Int, Int)
p:[(Int, Int)]
ps) [] [Char]
str [([Name SrcSpanInfo], [Char])]
nsts = (Int, Int) -> [Char] -> EP ()
printStringAt (Int, Int)
p (ShowS
forall a. Show a => a -> [Char]
show [Char]
str) EP () -> EP () -> EP ()
forall a b. EP a -> EP b -> EP b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> [(Int, Int)] -> [([Name SrcSpanInfo], [Char])] -> EP ()
printWarndeprs [(Int, Int)]
ps [([Name SrcSpanInfo], [Char])]
nsts
printWd [(Int, Int)]
ps [Name SrcSpanInfo
n] [Char]
str [([Name SrcSpanInfo], [Char])]
nsts = Name SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Name SrcSpanInfo
n EP () -> EP () -> EP ()
forall a b. EP a -> EP b -> EP b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> [(Int, Int)]
-> [Name SrcSpanInfo]
-> [Char]
-> [([Name SrcSpanInfo], [Char])]
-> EP ()
printWd [(Int, Int)]
ps [] [Char]
str [([Name SrcSpanInfo], [Char])]
nsts
printWd ((Int, Int)
p:[(Int, Int)]
ps) (Name SrcSpanInfo
n:[Name SrcSpanInfo]
ns) [Char]
str [([Name SrcSpanInfo], [Char])]
nsts = Name SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Name SrcSpanInfo
n EP () -> EP () -> EP ()
forall a b. EP a -> EP b -> EP b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> (Int, Int) -> [Char] -> EP ()
printStringAt (Int, Int)
p [Char]
"," EP () -> EP () -> EP ()
forall a b. EP a -> EP b -> EP b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> [(Int, Int)]
-> [Name SrcSpanInfo]
-> [Char]
-> [([Name SrcSpanInfo], [Char])]
-> EP ()
printWd [(Int, Int)]
ps [Name SrcSpanInfo]
ns [Char]
str [([Name SrcSpanInfo], [Char])]
nsts
printWd [(Int, Int)]
_ [Name SrcSpanInfo]
_ [Char]
_ [([Name SrcSpanInfo], [Char])]
_ = [Char] -> EP ()
forall a. [Char] -> a
internalError [Char]
"printWd"
sepFunBinds :: [Decl SrcSpanInfo] -> [Decl SrcSpanInfo]
sepFunBinds :: [Decl SrcSpanInfo] -> [Decl SrcSpanInfo]
sepFunBinds [] = []
sepFunBinds (FunBind SrcSpanInfo
_ [Match SrcSpanInfo]
ms:[Decl SrcSpanInfo]
ds) = (Match SrcSpanInfo -> Decl SrcSpanInfo)
-> [Match SrcSpanInfo] -> [Decl SrcSpanInfo]
forall a b. (a -> b) -> [a] -> [b]
map (\Match SrcSpanInfo
m -> SrcSpanInfo -> [Match SrcSpanInfo] -> Decl SrcSpanInfo
forall l. l -> [Match l] -> Decl l
FunBind (Match SrcSpanInfo -> SrcSpanInfo
forall l. Match l -> l
forall (ast :: * -> *) l. Annotated ast => ast l -> l
ann Match SrcSpanInfo
m) [Match SrcSpanInfo
m]) [Match SrcSpanInfo]
ms [Decl SrcSpanInfo] -> [Decl SrcSpanInfo] -> [Decl SrcSpanInfo]
forall a. [a] -> [a] -> [a]
++ [Decl SrcSpanInfo] -> [Decl SrcSpanInfo]
sepFunBinds [Decl SrcSpanInfo]
ds
sepFunBinds (Decl SrcSpanInfo
d:[Decl SrcSpanInfo]
ds) = Decl SrcSpanInfo
d Decl SrcSpanInfo -> [Decl SrcSpanInfo] -> [Decl SrcSpanInfo]
forall a. a -> [a] -> [a]
: [Decl SrcSpanInfo] -> [Decl SrcSpanInfo]
sepFunBinds [Decl SrcSpanInfo]
ds
sepClassFunBinds :: [ClassDecl SrcSpanInfo] -> [ClassDecl SrcSpanInfo]
sepClassFunBinds :: [ClassDecl SrcSpanInfo] -> [ClassDecl SrcSpanInfo]
sepClassFunBinds [] = []
sepClassFunBinds (ClsDecl SrcSpanInfo
_ (FunBind SrcSpanInfo
_ [Match SrcSpanInfo]
ms):[ClassDecl SrcSpanInfo]
ds) = (Match SrcSpanInfo -> ClassDecl SrcSpanInfo)
-> [Match SrcSpanInfo] -> [ClassDecl SrcSpanInfo]
forall a b. (a -> b) -> [a] -> [b]
map (\Match SrcSpanInfo
m -> SrcSpanInfo -> Decl SrcSpanInfo -> ClassDecl SrcSpanInfo
forall l. l -> Decl l -> ClassDecl l
ClsDecl (Match SrcSpanInfo -> SrcSpanInfo
forall l. Match l -> l
forall (ast :: * -> *) l. Annotated ast => ast l -> l
ann Match SrcSpanInfo
m) (Decl SrcSpanInfo -> ClassDecl SrcSpanInfo)
-> Decl SrcSpanInfo -> ClassDecl SrcSpanInfo
forall a b. (a -> b) -> a -> b
$ SrcSpanInfo -> [Match SrcSpanInfo] -> Decl SrcSpanInfo
forall l. l -> [Match l] -> Decl l
FunBind (Match SrcSpanInfo -> SrcSpanInfo
forall l. Match l -> l
forall (ast :: * -> *) l. Annotated ast => ast l -> l
ann Match SrcSpanInfo
m) [Match SrcSpanInfo
m]) [Match SrcSpanInfo]
ms [ClassDecl SrcSpanInfo]
-> [ClassDecl SrcSpanInfo] -> [ClassDecl SrcSpanInfo]
forall a. [a] -> [a] -> [a]
++ [ClassDecl SrcSpanInfo] -> [ClassDecl SrcSpanInfo]
sepClassFunBinds [ClassDecl SrcSpanInfo]
ds
sepClassFunBinds (ClassDecl SrcSpanInfo
d:[ClassDecl SrcSpanInfo]
ds) = ClassDecl SrcSpanInfo
d ClassDecl SrcSpanInfo
-> [ClassDecl SrcSpanInfo] -> [ClassDecl SrcSpanInfo]
forall a. a -> [a] -> [a]
: [ClassDecl SrcSpanInfo] -> [ClassDecl SrcSpanInfo]
sepClassFunBinds [ClassDecl SrcSpanInfo]
ds
sepInstFunBinds :: [InstDecl SrcSpanInfo] -> [InstDecl SrcSpanInfo]
sepInstFunBinds :: [InstDecl SrcSpanInfo] -> [InstDecl SrcSpanInfo]
sepInstFunBinds [] = []
sepInstFunBinds (InsDecl SrcSpanInfo
_ (FunBind SrcSpanInfo
_ [Match SrcSpanInfo]
ms):[InstDecl SrcSpanInfo]
ds) = (Match SrcSpanInfo -> InstDecl SrcSpanInfo)
-> [Match SrcSpanInfo] -> [InstDecl SrcSpanInfo]
forall a b. (a -> b) -> [a] -> [b]
map (\Match SrcSpanInfo
m -> SrcSpanInfo -> Decl SrcSpanInfo -> InstDecl SrcSpanInfo
forall l. l -> Decl l -> InstDecl l
InsDecl (Match SrcSpanInfo -> SrcSpanInfo
forall l. Match l -> l
forall (ast :: * -> *) l. Annotated ast => ast l -> l
ann Match SrcSpanInfo
m) (Decl SrcSpanInfo -> InstDecl SrcSpanInfo)
-> Decl SrcSpanInfo -> InstDecl SrcSpanInfo
forall a b. (a -> b) -> a -> b
$ SrcSpanInfo -> [Match SrcSpanInfo] -> Decl SrcSpanInfo
forall l. l -> [Match l] -> Decl l
FunBind (Match SrcSpanInfo -> SrcSpanInfo
forall l. Match l -> l
forall (ast :: * -> *) l. Annotated ast => ast l -> l
ann Match SrcSpanInfo
m) [Match SrcSpanInfo
m]) [Match SrcSpanInfo]
ms [InstDecl SrcSpanInfo]
-> [InstDecl SrcSpanInfo] -> [InstDecl SrcSpanInfo]
forall a. [a] -> [a] -> [a]
++ [InstDecl SrcSpanInfo] -> [InstDecl SrcSpanInfo]
sepInstFunBinds [InstDecl SrcSpanInfo]
ds
sepInstFunBinds (InstDecl SrcSpanInfo
d:[InstDecl SrcSpanInfo]
ds) = InstDecl SrcSpanInfo
d InstDecl SrcSpanInfo
-> [InstDecl SrcSpanInfo] -> [InstDecl SrcSpanInfo]
forall a. a -> [a] -> [a]
: [InstDecl SrcSpanInfo] -> [InstDecl SrcSpanInfo]
sepInstFunBinds [InstDecl SrcSpanInfo]
ds
instance ExactP DeclHead where
exactP :: DeclHead SrcSpanInfo -> EP ()
exactP DeclHead SrcSpanInfo
dh' = case DeclHead SrcSpanInfo
dh' of
DHead SrcSpanInfo
_ Name SrcSpanInfo
n -> Name SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactP Name SrcSpanInfo
n
DHInfix SrcSpanInfo
_ TyVarBind SrcSpanInfo
tva Name SrcSpanInfo
n -> TyVarBind SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactP TyVarBind SrcSpanInfo
tva EP () -> EP () -> EP ()
forall a b. EP a -> EP b -> EP b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> Name SrcSpanInfo -> EP ()
epInfixName Name SrcSpanInfo
n
DHParen SrcSpanInfo
l DeclHead SrcSpanInfo
dh ->
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
[SrcSpan
_,SrcSpan
b] -> [Char] -> EP ()
printString [Char]
"(" EP () -> EP () -> EP ()
forall a b. EP a -> EP b -> EP b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> DeclHead SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC DeclHead SrcSpanInfo
dh EP () -> EP () -> EP ()
forall a b. EP a -> EP b -> EP b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> (Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
b) [Char]
")"
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: DeclHead: DeclParen is given wrong number of srcInfoPoints"
DHApp SrcSpanInfo
_ DeclHead SrcSpanInfo
dh TyVarBind SrcSpanInfo
t -> DeclHead SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactP DeclHead SrcSpanInfo
dh EP () -> EP () -> EP ()
forall a b. EP a -> EP b -> EP b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> TyVarBind SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC TyVarBind SrcSpanInfo
t
instance ExactP InstRule where
exactP :: InstRule SrcSpanInfo -> EP ()
exactP InstRule SrcSpanInfo
ih' = case InstRule SrcSpanInfo
ih' of
IRule SrcSpanInfo
l Maybe [TyVarBind SrcSpanInfo]
mtvs Maybe (Context SrcSpanInfo)
mctxt InstHead SrcSpanInfo
qn -> do
let pts :: [SrcSpan]
pts = SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l
_ <- case Maybe [TyVarBind SrcSpanInfo]
mtvs of
Maybe [TyVarBind SrcSpanInfo]
Nothing -> [SrcSpan] -> EP [SrcSpan]
forall a. a -> EP a
forall (m :: * -> *) a. Monad m => a -> m a
return [SrcSpan]
pts
Just [TyVarBind SrcSpanInfo]
tvs ->
case [SrcSpan]
pts of
[SrcSpan
a,SrcSpan
b] -> do
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
a) [Char]
"forall"
(TyVarBind SrcSpanInfo -> EP ())
-> [TyVarBind SrcSpanInfo] -> EP ()
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> m b) -> t a -> m ()
mapM_ TyVarBind SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC [TyVarBind SrcSpanInfo]
tvs
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
b) [Char]
"."
[SrcSpan] -> EP [SrcSpan]
forall a. a -> EP a
forall (m :: * -> *) a. Monad m => a -> m a
return [SrcSpan]
pts
[SrcSpan]
_ -> [Char] -> EP [SrcSpan]
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: InstRule: IRule is given too few srcInfoPoints"
maybeEP exactPC mctxt
exactPC qn
IParen SrcSpanInfo
l InstRule SrcSpanInfo
ih ->
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
[SrcSpan
a,SrcSpan
b] -> (Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
a) [Char]
"(" EP () -> EP () -> EP ()
forall a b. EP a -> EP b -> EP b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> InstRule SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC InstRule SrcSpanInfo
ih EP () -> EP () -> EP ()
forall a b. EP a -> EP b -> EP b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> (Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
b) [Char]
")"
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: InstRule: IParen is given wrong number of srcInfoPoints"
instance ExactP InstHead where
exactP :: InstHead SrcSpanInfo -> EP ()
exactP InstHead SrcSpanInfo
doih' = case InstHead SrcSpanInfo
doih' of
IHCon SrcSpanInfo
_ QName SrcSpanInfo
qn -> QName SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC QName SrcSpanInfo
qn
IHInfix SrcSpanInfo
_ Type SrcSpanInfo
ta QName SrcSpanInfo
qn -> Type SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Type SrcSpanInfo
ta EP () -> EP () -> EP ()
forall a b. EP a -> EP b -> EP b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> QName SrcSpanInfo -> EP ()
epInfixQName QName SrcSpanInfo
qn
IHParen SrcSpanInfo
l InstHead SrcSpanInfo
doih ->
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
[SrcSpan
a,SrcSpan
b] -> (Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
a) [Char]
"(" EP () -> EP () -> EP ()
forall a b. EP a -> EP b -> EP b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> InstHead SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC InstHead SrcSpanInfo
doih EP () -> EP () -> EP ()
forall a b. EP a -> EP b -> EP b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> (Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
b) [Char]
")"
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: OrInstHead: IHParen is given wrong number of srcInfoPoints"
IHApp SrcSpanInfo
_ InstHead SrcSpanInfo
doih Type SrcSpanInfo
t -> InstHead SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC InstHead SrcSpanInfo
doih EP () -> EP () -> EP ()
forall a b. EP a -> EP b -> EP b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> Type SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Type SrcSpanInfo
t
instance ExactP TyVarBind where
exactP :: TyVarBind SrcSpanInfo -> EP ()
exactP (KindedVar SrcSpanInfo
l Name SrcSpanInfo
n Type SrcSpanInfo
k) =
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
[SrcSpan
_,SrcSpan
b,SrcSpan
c] -> do
[Char] -> EP ()
printString [Char]
"("
Name SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Name SrcSpanInfo
n
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
b) [Char]
"::"
Type SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Type SrcSpanInfo
k
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
c) [Char]
")"
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: TyVarBind: KindedVar is given wrong number of srcInfoPoints"
exactP (UnkindedVar SrcSpanInfo
l Name SrcSpanInfo
n) =
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
[SrcSpan
a,SrcSpan
_,SrcSpan
c] -> do
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
a) [Char]
"("
Name SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Name SrcSpanInfo
n
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
c) [Char]
")"
[] -> Name SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Name SrcSpanInfo
n
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: TyVarBind: UnkindedVar is given wrong number of srcInfoPoints"
instance ExactP Type where
exactP :: Type SrcSpanInfo -> EP ()
exactP Type SrcSpanInfo
t' = case Type SrcSpanInfo
t' of
TyForall SrcSpanInfo
l Maybe [TyVarBind SrcSpanInfo]
mtvs Maybe (Context SrcSpanInfo)
mctxt Type SrcSpanInfo
t -> do
let pts :: [SrcSpan]
pts = SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l
_ <- case Maybe [TyVarBind SrcSpanInfo]
mtvs of
Maybe [TyVarBind SrcSpanInfo]
Nothing -> [SrcSpan] -> EP [SrcSpan]
forall a. a -> EP a
forall (m :: * -> *) a. Monad m => a -> m a
return [SrcSpan]
pts
Just [TyVarBind SrcSpanInfo]
tvs ->
case [SrcSpan]
pts of
SrcSpan
_:SrcSpan
b:[SrcSpan]
pts' -> do
[Char] -> EP ()
printString [Char]
"forall"
(TyVarBind SrcSpanInfo -> EP ())
-> [TyVarBind SrcSpanInfo] -> EP ()
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> m b) -> t a -> m ()
mapM_ TyVarBind SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC [TyVarBind SrcSpanInfo]
tvs
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
b) [Char]
"."
[SrcSpan] -> EP [SrcSpan]
forall a. a -> EP a
forall (m :: * -> *) a. Monad m => a -> m a
return [SrcSpan]
pts'
[SrcSpan]
_ -> [Char] -> EP [SrcSpan]
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: Type: TyForall is given too few srcInfoPoints"
maybeEP exactPC mctxt
exactPC t
TyStar SrcSpanInfo
_ -> [Char] -> EP ()
printString [Char]
"*"
TyFun SrcSpanInfo
l Type SrcSpanInfo
t1 Type SrcSpanInfo
t2 ->
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
[SrcSpan
a] -> do
Type SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactP Type SrcSpanInfo
t1
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
a) [Char]
"->"
Type SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Type SrcSpanInfo
t2
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: Type: TyFun is given wrong number of srcInfoPoints"
TyTuple SrcSpanInfo
l Boxed
bx [Type SrcSpanInfo]
ts ->
case Boxed
bx of
Boxed
Boxed -> [SrcSpan] -> [Type SrcSpanInfo] -> EP ()
forall (ast :: * -> *).
ExactP ast =>
[SrcSpan] -> [ast SrcSpanInfo] -> EP ()
parenList (SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l) [Type SrcSpanInfo]
ts
Boxed
Unboxed -> [SrcSpan] -> [Type SrcSpanInfo] -> EP ()
forall (ast :: * -> *).
ExactP ast =>
[SrcSpan] -> [ast SrcSpanInfo] -> EP ()
parenHashList (SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l) [Type SrcSpanInfo]
ts
TyUnboxedSum SrcSpanInfo
l [Type SrcSpanInfo]
es ->
[SrcSpan] -> [Type SrcSpanInfo] -> EP ()
forall (ast :: * -> *).
ExactP ast =>
[SrcSpan] -> [ast SrcSpanInfo] -> EP ()
unboxedSumTypeList (SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l) [Type SrcSpanInfo]
es
TyList SrcSpanInfo
l Type SrcSpanInfo
t ->
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
[SrcSpan
_,SrcSpan
b] -> do
[Char] -> EP ()
printString [Char]
"["
Type SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Type SrcSpanInfo
t
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
b) [Char]
"]"
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: Type: TyList is given wrong number of srcInfoPoints"
TyParArray SrcSpanInfo
l Type SrcSpanInfo
t ->
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
[SrcSpan
_,SrcSpan
b] -> do
[Char] -> EP ()
printString [Char]
"[:"
Type SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Type SrcSpanInfo
t
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
b) [Char]
":]"
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: Type: TyParArray is given wrong number of srcInfoPoints"
TyApp SrcSpanInfo
_ Type SrcSpanInfo
t1 Type SrcSpanInfo
t2 -> Type SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactP Type SrcSpanInfo
t1 EP () -> EP () -> EP ()
forall a b. EP a -> EP b -> EP b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> Type SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Type SrcSpanInfo
t2
TyVar SrcSpanInfo
_ Name SrcSpanInfo
n -> Name SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactP Name SrcSpanInfo
n
TyCon SrcSpanInfo
_ QName SrcSpanInfo
qn -> QName SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactP QName SrcSpanInfo
qn
TyParen SrcSpanInfo
l Type SrcSpanInfo
t ->
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
[SrcSpan
_,SrcSpan
b] -> do
[Char] -> EP ()
printString [Char]
"("
Type SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Type SrcSpanInfo
t
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
b) [Char]
")"
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: Type: TyParen is given wrong number of srcInfoPoints"
TyInfix SrcSpanInfo
_ Type SrcSpanInfo
t1 MaybePromotedName SrcSpanInfo
qn Type SrcSpanInfo
t2 -> Type SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactP Type SrcSpanInfo
t1 EP () -> EP () -> EP ()
forall a b. EP a -> EP b -> EP b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> MaybePromotedName SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactP MaybePromotedName SrcSpanInfo
qn EP () -> EP () -> EP ()
forall a b. EP a -> EP b -> EP b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> Type SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Type SrcSpanInfo
t2
TyKind SrcSpanInfo
l Type SrcSpanInfo
t Type SrcSpanInfo
kd ->
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
[SrcSpan
_,SrcSpan
b,SrcSpan
c] -> do
[Char] -> EP ()
printString [Char]
"("
Type SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Type SrcSpanInfo
t
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
b) [Char]
"::"
Type SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Type SrcSpanInfo
kd
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
c) [Char]
")"
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: Type: TyKind is given wrong number of srcInfoPoints"
TyPromoted SrcSpanInfo
_ Promoted SrcSpanInfo
p -> Promoted SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Promoted SrcSpanInfo
p
TyEquals SrcSpanInfo
l Type SrcSpanInfo
t0 Type SrcSpanInfo
t1 -> case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
SrcSpan
a:[SrcSpan]
_ -> Type SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Type SrcSpanInfo
t0 EP () -> EP () -> EP ()
forall a b. EP a -> EP b -> EP b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> (Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
a) [Char]
"~" EP () -> EP () -> EP ()
forall a b. EP a -> EP b -> EP b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> Type SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Type SrcSpanInfo
t1
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: Type: TyEquals is given wrong number of srcInfoPoints"
TySplice SrcSpanInfo
_ Splice SrcSpanInfo
sp -> Splice SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactP Splice SrcSpanInfo
sp
TyBang SrcSpanInfo
_ BangType SrcSpanInfo
b Unpackedness SrcSpanInfo
u Type SrcSpanInfo
t -> Unpackedness SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Unpackedness SrcSpanInfo
u EP () -> EP () -> EP ()
forall a b. EP a -> EP b -> EP b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> BangType SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC BangType SrcSpanInfo
b EP () -> EP () -> EP ()
forall a b. EP a -> EP b -> EP b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> Type SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Type SrcSpanInfo
t
TyWildCard SrcSpanInfo
_ Maybe (Name SrcSpanInfo)
mn -> [Char] -> EP ()
printString [Char]
"_" EP () -> EP () -> EP ()
forall a b. EP a -> EP b -> EP b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> (Name SrcSpanInfo -> EP ()) -> Maybe (Name SrcSpanInfo) -> EP ()
forall a. (a -> EP ()) -> Maybe a -> EP ()
maybeEP Name SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Maybe (Name SrcSpanInfo)
mn
TyQuasiQuote SrcSpanInfo
_ [Char]
name [Char]
qt -> do
let qtLines :: [[Char]]
qtLines = [Char] -> [[Char]]
lines [Char]
qt
[Char] -> EP ()
printString ([Char] -> EP ()) -> [Char] -> EP ()
forall a b. (a -> b) -> a -> b
$ [Char]
"[" [Char] -> ShowS
forall a. [a] -> [a] -> [a]
++ [Char]
name [Char] -> ShowS
forall a. [a] -> [a] -> [a]
++ [Char]
"|"
[EP ()] -> EP ()
forall (t :: * -> *) (m :: * -> *) a.
(Foldable t, Monad m) =>
t (m a) -> m ()
sequence_ (EP () -> [EP ()] -> [EP ()]
forall a. a -> [a] -> [a]
intersperse EP ()
newLine ([EP ()] -> [EP ()]) -> [EP ()] -> [EP ()]
forall a b. (a -> b) -> a -> b
$ ([Char] -> EP ()) -> [[Char]] -> [EP ()]
forall a b. (a -> b) -> [a] -> [b]
map [Char] -> EP ()
printString [[Char]]
qtLines)
[Char] -> EP ()
printString [Char]
"|]"
instance ExactP MaybePromotedName where
exactP :: MaybePromotedName SrcSpanInfo -> EP ()
exactP (PromotedName SrcSpanInfo
l QName SrcSpanInfo
qn) = case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
[SrcSpan
a] -> (Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
a) [Char]
"'" EP () -> EP () -> EP ()
forall a b. EP a -> EP b -> EP b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> QName SrcSpanInfo -> EP ()
epInfixQName QName SrcSpanInfo
qn
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: MaybePromotedName: PromotedName given wrong number of args"
exactP (UnpromotedName SrcSpanInfo
_ QName SrcSpanInfo
qn) = QName SrcSpanInfo -> EP ()
epInfixQName QName SrcSpanInfo
qn
instance ExactP Promoted where
exactP :: Promoted SrcSpanInfo -> EP ()
exactP (PromotedInteger SrcSpanInfo
_ Integer
_ [Char]
rw) = [Char] -> EP ()
printString [Char]
rw
exactP (PromotedString SrcSpanInfo
_ [Char]
_ [Char]
rw) = [Char] -> EP ()
printString (Char
'\"'Char -> ShowS
forall a. a -> [a] -> [a]
:[Char]
rw [Char] -> ShowS
forall a. [a] -> [a] -> [a]
++ [Char]
"\"")
exactP (PromotedCon SrcSpanInfo
l Bool
True QName SrcSpanInfo
qn) = case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
[SrcSpan
a] -> (Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
a) [Char]
"'" EP () -> EP () -> EP ()
forall a b. EP a -> EP b -> EP b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> QName SrcSpanInfo -> EP ()
epQName QName SrcSpanInfo
qn
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: Promoted: PromotedCon is given wrong number of srcInfoPoints"
exactP (PromotedCon SrcSpanInfo
_ Bool
False QName SrcSpanInfo
qn) = QName SrcSpanInfo -> EP ()
epQName QName SrcSpanInfo
qn
exactP (PromotedList SrcSpanInfo
l Bool
b [Type SrcSpanInfo]
pl) =
let o :: [Char]
o | Bool
b = [Char]
"'[" | Bool
otherwise = [Char]
"["
e :: [Char]
e = [Char]
"]"
pts :: [SrcSpan]
pts = SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l
in [(SrcSpan, [Char])] -> [Type SrcSpanInfo] -> EP ()
forall (ast :: * -> *) loc.
(ExactP ast, SrcInfo loc) =>
[(loc, [Char])] -> [ast SrcSpanInfo] -> EP ()
printInterleaved ([SrcSpan] -> [[Char]] -> [(SrcSpan, [Char])]
forall a b. [a] -> [b] -> [(a, b)]
zip [SrcSpan]
pts ([Char]
o[Char] -> [[Char]] -> [[Char]]
forall a. a -> [a] -> [a]
: Int -> [Char] -> [[Char]]
forall a. Int -> a -> [a]
replicate ([SrcSpan] -> Int
forall a. [a] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [SrcSpan]
pts Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
2) [Char]
"," [[Char]] -> [[Char]] -> [[Char]]
forall a. [a] -> [a] -> [a]
++ [[Char]
e])) [Type SrcSpanInfo]
pl
exactP (PromotedTuple SrcSpanInfo
l [Type SrcSpanInfo]
pl) =
let o :: [Char]
o = [Char]
"'("
e :: [Char]
e = [Char]
")"
pts :: [SrcSpan]
pts = SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l
in [(SrcSpan, [Char])] -> [Type SrcSpanInfo] -> EP ()
forall (ast :: * -> *) loc.
(ExactP ast, SrcInfo loc) =>
[(loc, [Char])] -> [ast SrcSpanInfo] -> EP ()
printInterleaved ([SrcSpan] -> [[Char]] -> [(SrcSpan, [Char])]
forall a b. [a] -> [b] -> [(a, b)]
zip [SrcSpan]
pts ([Char]
o[Char] -> [[Char]] -> [[Char]]
forall a. a -> [a] -> [a]
: Int -> [Char] -> [[Char]]
forall a. Int -> a -> [a]
replicate ([SrcSpan] -> Int
forall a. [a] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [SrcSpan]
pts Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
2) [Char]
"," [[Char]] -> [[Char]] -> [[Char]]
forall a. [a] -> [a] -> [a]
++ [[Char]
e])) [Type SrcSpanInfo]
pl
exactP (PromotedUnit SrcSpanInfo
l) = case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
[SrcSpan
_,SrcSpan
b] -> do
[Char] -> EP ()
printString [Char]
"("
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
b) [Char]
")"
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: Promoted: PromotedUnit is given wrong number of srcInfoPoints"
instance ExactP Context where
exactP :: Context SrcSpanInfo -> EP ()
exactP Context SrcSpanInfo
ctxt = do
Context SrcSpanInfo -> EP ()
printContext Context SrcSpanInfo
ctxt
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos (SrcSpan -> (Int, Int))
-> (Context SrcSpanInfo -> SrcSpan)
-> Context SrcSpanInfo
-> (Int, Int)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [SrcSpan] -> SrcSpan
forall a. HasCallStack => [a] -> a
last ([SrcSpan] -> SrcSpan)
-> (Context SrcSpanInfo -> [SrcSpan])
-> Context SrcSpanInfo
-> SrcSpan
forall b c a. (b -> c) -> (a -> b) -> a -> c
. SrcSpanInfo -> [SrcSpan]
srcInfoPoints (SrcSpanInfo -> [SrcSpan])
-> (Context SrcSpanInfo -> SrcSpanInfo)
-> Context SrcSpanInfo
-> [SrcSpan]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Context SrcSpanInfo -> SrcSpanInfo
forall l. Context l -> l
forall (ast :: * -> *) l. Annotated ast => ast l -> l
ann (Context SrcSpanInfo -> (Int, Int))
-> Context SrcSpanInfo -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Context SrcSpanInfo
ctxt) [Char]
"=>"
printContext :: Context SrcSpanInfo -> EP ()
printContext :: Context SrcSpanInfo -> EP ()
printContext Context SrcSpanInfo
ctxt = do
let l :: SrcSpanInfo
l = Context SrcSpanInfo -> SrcSpanInfo
forall l. Context l -> l
forall (ast :: * -> *) l. Annotated ast => ast l -> l
ann Context SrcSpanInfo
ctxt
pts :: [SrcSpan]
pts = [SrcSpan] -> [SrcSpan]
forall a. HasCallStack => [a] -> [a]
init ([SrcSpan] -> [SrcSpan]) -> [SrcSpan] -> [SrcSpan]
forall a b. (a -> b) -> a -> b
$ SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l
case Context SrcSpanInfo
ctxt of
CxSingle SrcSpanInfo
_ Asst SrcSpanInfo
asst -> Asst SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactP Asst SrcSpanInfo
asst
CxEmpty SrcSpanInfo
_ ->
case [SrcSpan]
pts of
[SrcSpan
a,SrcSpan
b] -> do
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
a) [Char]
"("
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
b) [Char]
")"
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: Context: CxEmpty is given wrong number of srcInfoPoints"
CxTuple SrcSpanInfo
_ [Asst SrcSpanInfo]
assts -> [SrcSpan] -> [Asst SrcSpanInfo] -> EP ()
forall (ast :: * -> *).
ExactP ast =>
[SrcSpan] -> [ast SrcSpanInfo] -> EP ()
parenList [SrcSpan]
pts [Asst SrcSpanInfo]
assts
instance ExactP Asst where
exactP :: Asst SrcSpanInfo -> EP ()
exactP Asst SrcSpanInfo
asst = case Asst SrcSpanInfo
asst of
TypeA SrcSpanInfo
_ Type SrcSpanInfo
t -> Type SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactP Type SrcSpanInfo
t
IParam SrcSpanInfo
l IPName SrcSpanInfo
ipn Type SrcSpanInfo
t ->
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
[SrcSpan
a] -> do
IPName SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactP IPName SrcSpanInfo
ipn
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
a) [Char]
"::"
Type SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Type SrcSpanInfo
t
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: Asst: IParam is given wrong number of srcInfoPoints"
ParenA SrcSpanInfo
l Asst SrcSpanInfo
asst' ->
case Int -> [SrcSpan] -> [SrcSpan]
forall a. Int -> [a] -> [a]
take Int
2 ([SrcSpan] -> [SrcSpan]) -> [SrcSpan] -> [SrcSpan]
forall a b. (a -> b) -> a -> b
$ SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
[SrcSpan
a,SrcSpan
b] -> do
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
a) [Char]
"("
Asst SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Asst SrcSpanInfo
asst'
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
b) [Char]
")"
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: Asst: ParenA is given wrong number of srcInfoPoints"
instance ExactP Deriving where
exactP :: Deriving SrcSpanInfo -> EP ()
exactP (Deriving SrcSpanInfo
l Maybe (DerivStrategy SrcSpanInfo)
mds [InstRule SrcSpanInfo]
ihs) =
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
SrcSpan
_:[SrcSpan]
pts -> do
[Char] -> EP ()
printString [Char]
"deriving"
(DerivStrategy SrcSpanInfo -> EP ())
-> Maybe (DerivStrategy SrcSpanInfo) -> EP ()
forall a. (a -> EP ()) -> Maybe a -> EP ()
maybeEP DerivStrategy SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Maybe (DerivStrategy SrcSpanInfo)
mds
case [SrcSpan]
pts of
[] -> InstRule SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC (InstRule SrcSpanInfo -> EP ()) -> InstRule SrcSpanInfo -> EP ()
forall a b. (a -> b) -> a -> b
$ [InstRule SrcSpanInfo] -> InstRule SrcSpanInfo
forall a. HasCallStack => [a] -> a
head [InstRule SrcSpanInfo]
ihs
[SrcSpan]
_ -> [SrcSpan] -> [InstRule SrcSpanInfo] -> EP ()
forall (ast :: * -> *).
ExactP ast =>
[SrcSpan] -> [ast SrcSpanInfo] -> EP ()
parenList [SrcSpan]
pts [InstRule SrcSpanInfo]
ihs
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: Deriving is given too few srcInfoPoints"
instance ExactP DerivStrategy where
exactP :: DerivStrategy SrcSpanInfo -> EP ()
exactP (DerivStock SrcSpanInfo
_) =
[Char] -> EP ()
printString [Char]
"stock"
exactP (DerivAnyclass SrcSpanInfo
_) =
[Char] -> EP ()
printString [Char]
"anyclass"
exactP (DerivNewtype SrcSpanInfo
_) =
[Char] -> EP ()
printString [Char]
"newtype"
exactP (DerivVia SrcSpanInfo
_ Type SrcSpanInfo
ty) = do
[Char] -> EP ()
printString [Char]
"via"
Type SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactP Type SrcSpanInfo
ty
instance ExactP ClassDecl where
exactP :: ClassDecl SrcSpanInfo -> EP ()
exactP ClassDecl SrcSpanInfo
cdecl = case ClassDecl SrcSpanInfo
cdecl of
ClsDecl SrcSpanInfo
_ Decl SrcSpanInfo
d -> Decl SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactP Decl SrcSpanInfo
d
ClsDataFam SrcSpanInfo
l Maybe (Context SrcSpanInfo)
mctxt DeclHead SrcSpanInfo
dh Maybe (ResultSig SrcSpanInfo)
mk ->
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
SrcSpan
_:[SrcSpan]
pts -> do
[Char] -> EP ()
printString [Char]
"data"
(Context SrcSpanInfo -> EP ())
-> Maybe (Context SrcSpanInfo) -> EP ()
forall a. (a -> EP ()) -> Maybe a -> EP ()
maybeEP Context SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Maybe (Context SrcSpanInfo)
mctxt
DeclHead SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC DeclHead SrcSpanInfo
dh
(ResultSig SrcSpanInfo -> EP ())
-> Maybe (ResultSig SrcSpanInfo) -> EP ()
forall a. (a -> EP ()) -> Maybe a -> EP ()
maybeEP (\ResultSig SrcSpanInfo
kd -> (Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos ([SrcSpan] -> SrcSpan
forall a. HasCallStack => [a] -> a
head [SrcSpan]
pts)) [Char]
"::" EP () -> EP () -> EP ()
forall a b. EP a -> EP b -> EP b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> ResultSig SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC ResultSig SrcSpanInfo
kd) Maybe (ResultSig SrcSpanInfo)
mk
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: ClassDecl: ClsDataFam is given too few srcInfoPoints"
ClsTyFam SrcSpanInfo
l DeclHead SrcSpanInfo
dh Maybe (ResultSig SrcSpanInfo)
mk Maybe (InjectivityInfo SrcSpanInfo)
mi ->
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
SrcSpan
_:[SrcSpan]
_ -> do
[Char] -> EP ()
printString [Char]
"type"
DeclHead SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC DeclHead SrcSpanInfo
dh
(ResultSig SrcSpanInfo -> EP ())
-> Maybe (ResultSig SrcSpanInfo) -> EP ()
forall a. (a -> EP ()) -> Maybe a -> EP ()
maybeEP ResultSig SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Maybe (ResultSig SrcSpanInfo)
mk
(InjectivityInfo SrcSpanInfo -> EP ())
-> Maybe (InjectivityInfo SrcSpanInfo) -> EP ()
forall a. (a -> EP ()) -> Maybe a -> EP ()
maybeEP InjectivityInfo SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Maybe (InjectivityInfo SrcSpanInfo)
mi
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: ClassDecl: ClsTyFam is given too few srcInfoPoints"
ClsTyDef SrcSpanInfo
l TypeEqn SrcSpanInfo
t1 ->
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
SrcSpan
_:SrcSpan
b:[SrcSpan]
_ -> do
[Char] -> EP ()
printString [Char]
"type"
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
b) [Char]
"instance"
TypeEqn SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC TypeEqn SrcSpanInfo
t1
SrcSpan
_:[SrcSpan]
_ -> do
[Char] -> EP ()
printString [Char]
"type"
TypeEqn SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC TypeEqn SrcSpanInfo
t1
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: ClassDecl: ClsTyDef is given too few srcInfoPoints"
ClsDefSig SrcSpanInfo
l Name SrcSpanInfo
n Type SrcSpanInfo
t ->
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
SrcSpan
_:SrcSpan
b:[SrcSpan]
_ -> do
[Char] -> EP ()
printString [Char]
"default"
Name SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Name SrcSpanInfo
n
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
b) [Char]
"::"
Type SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Type SrcSpanInfo
t
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: ClassDecl: ClsDefSig is given too few srcInfoPoints"
instance ExactP InstDecl where
exactP :: InstDecl SrcSpanInfo -> EP ()
exactP InstDecl SrcSpanInfo
idecl = case InstDecl SrcSpanInfo
idecl of
InsDecl SrcSpanInfo
_ Decl SrcSpanInfo
d -> Decl SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactP Decl SrcSpanInfo
d
InsType SrcSpanInfo
l Type SrcSpanInfo
t1 Type SrcSpanInfo
t2 ->
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
[SrcSpan
_,SrcSpan
b] -> do
[Char] -> EP ()
printString [Char]
"type"
Type SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Type SrcSpanInfo
t1
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
b) [Char]
"="
Type SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Type SrcSpanInfo
t2
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> a
internalError [Char]
"InstDecl -> InsType"
InsData SrcSpanInfo
l DataOrNew SrcSpanInfo
dn Type SrcSpanInfo
t [QualConDecl SrcSpanInfo]
constrs [Deriving SrcSpanInfo]
mder -> do
DataOrNew SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactP DataOrNew SrcSpanInfo
dn
Type SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Type SrcSpanInfo
t
[(SrcSpan, [Char])] -> [QualConDecl SrcSpanInfo] -> EP ()
forall (ast :: * -> *) loc.
(ExactP ast, SrcInfo loc) =>
[(loc, [Char])] -> [ast SrcSpanInfo] -> EP ()
printInterleaved ([SrcSpan] -> [[Char]] -> [(SrcSpan, [Char])]
forall a b. [a] -> [b] -> [(a, b)]
zip (SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l) ([Char]
"="[Char] -> [[Char]] -> [[Char]]
forall a. a -> [a] -> [a]
: [Char] -> [[Char]]
forall a. a -> [a]
repeat [Char]
"|")) [QualConDecl SrcSpanInfo]
constrs
(Deriving SrcSpanInfo -> EP ()) -> [Deriving SrcSpanInfo] -> EP ()
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> m b) -> t a -> m ()
mapM_ Deriving SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC [Deriving SrcSpanInfo]
mder
InsGData SrcSpanInfo
l DataOrNew SrcSpanInfo
dn Type SrcSpanInfo
t Maybe (Type SrcSpanInfo)
mk [GadtDecl SrcSpanInfo]
gds [Deriving SrcSpanInfo]
mder -> do
let pts :: [SrcSpan]
pts = SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l
DataOrNew SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactP DataOrNew SrcSpanInfo
dn
Type SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Type SrcSpanInfo
t
pts1 <- case Maybe (Type SrcSpanInfo)
mk of
Maybe (Type SrcSpanInfo)
Nothing -> [SrcSpan] -> EP [SrcSpan]
forall a. a -> EP a
forall (m :: * -> *) a. Monad m => a -> m a
return [SrcSpan]
pts
Just Type SrcSpanInfo
kd -> case [SrcSpan]
pts of
SrcSpan
p:[SrcSpan]
pts' -> do
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
p) [Char]
"::"
Type SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Type SrcSpanInfo
kd
[SrcSpan] -> EP [SrcSpan]
forall a. a -> EP a
forall (m :: * -> *) a. Monad m => a -> m a
return [SrcSpan]
pts'
[SrcSpan]
_ -> [Char] -> EP [SrcSpan]
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: InstDecl: InsGData is given too few srcInfoPoints"
case pts1 of
SrcSpan
x:[SrcSpan]
_ -> do
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
x) [Char]
"where"
(GadtDecl SrcSpanInfo -> EP ()) -> [GadtDecl SrcSpanInfo] -> EP ()
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> m b) -> t a -> m ()
mapM_ GadtDecl SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC [GadtDecl SrcSpanInfo]
gds
(Deriving SrcSpanInfo -> EP ()) -> [Deriving SrcSpanInfo] -> EP ()
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> m b) -> t a -> m ()
mapM_ Deriving SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC [Deriving SrcSpanInfo]
mder
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: InstDecl: InsGData is given too few srcInfoPoints"
instance ExactP FunDep where
exactP :: FunDep SrcSpanInfo -> EP ()
exactP (FunDep SrcSpanInfo
l [Name SrcSpanInfo]
nxs [Name SrcSpanInfo]
nys) =
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
[SrcSpan
a] -> do
(Name SrcSpanInfo -> EP ()) -> [Name SrcSpanInfo] -> EP ()
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> m b) -> t a -> m ()
mapM_ Name SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC [Name SrcSpanInfo]
nxs
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
a) [Char]
"->"
(Name SrcSpanInfo -> EP ()) -> [Name SrcSpanInfo] -> EP ()
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> m b) -> t a -> m ()
mapM_ Name SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC [Name SrcSpanInfo]
nys
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: FunDep is given wrong number of srcInfoPoints"
instance ExactP QualConDecl where
exactP :: QualConDecl SrcSpanInfo -> EP ()
exactP (QualConDecl SrcSpanInfo
l Maybe [TyVarBind SrcSpanInfo]
mtvs Maybe (Context SrcSpanInfo)
mctxt ConDecl SrcSpanInfo
cd) = do
let pts :: [SrcSpan]
pts = SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l
_ <- case Maybe [TyVarBind SrcSpanInfo]
mtvs of
Maybe [TyVarBind SrcSpanInfo]
Nothing -> [SrcSpan] -> EP [SrcSpan]
forall a. a -> EP a
forall (m :: * -> *) a. Monad m => a -> m a
return [SrcSpan]
pts
Just [TyVarBind SrcSpanInfo]
tvs ->
case [SrcSpan]
pts of
SrcSpan
_:SrcSpan
b:[SrcSpan]
pts' -> do
[Char] -> EP ()
printString [Char]
"forall"
(TyVarBind SrcSpanInfo -> EP ())
-> [TyVarBind SrcSpanInfo] -> EP ()
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> m b) -> t a -> m ()
mapM_ TyVarBind SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC [TyVarBind SrcSpanInfo]
tvs
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
b) [Char]
"."
[SrcSpan] -> EP [SrcSpan]
forall a. a -> EP a
forall (m :: * -> *) a. Monad m => a -> m a
return [SrcSpan]
pts'
[SrcSpan]
_ -> [Char] -> EP [SrcSpan]
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: QualConDecl is given wrong number of srcInfoPoints"
maybeEP exactPC mctxt
exactPC cd
instance ExactP ConDecl where
exactP :: ConDecl SrcSpanInfo -> EP ()
exactP ConDecl SrcSpanInfo
cd = case ConDecl SrcSpanInfo
cd of
ConDecl SrcSpanInfo
_ Name SrcSpanInfo
n [Type SrcSpanInfo]
bts -> Name SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactP Name SrcSpanInfo
n EP () -> EP () -> EP ()
forall a b. EP a -> EP b -> EP b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> (Type SrcSpanInfo -> EP ()) -> [Type SrcSpanInfo] -> EP ()
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> m b) -> t a -> m ()
mapM_ Type SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC [Type SrcSpanInfo]
bts
InfixConDecl SrcSpanInfo
_ Type SrcSpanInfo
bta Name SrcSpanInfo
n Type SrcSpanInfo
btb -> Type SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactP Type SrcSpanInfo
bta EP () -> EP () -> EP ()
forall a b. EP a -> EP b -> EP b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> Name SrcSpanInfo -> EP ()
epInfixName Name SrcSpanInfo
n EP () -> EP () -> EP ()
forall a b. EP a -> EP b -> EP b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> Type SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactP Type SrcSpanInfo
btb
RecDecl SrcSpanInfo
l Name SrcSpanInfo
n [FieldDecl SrcSpanInfo]
fds -> Name SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactP Name SrcSpanInfo
n EP () -> EP () -> EP ()
forall a b. EP a -> EP b -> EP b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> [SrcSpan] -> [FieldDecl SrcSpanInfo] -> EP ()
forall (ast :: * -> *).
ExactP ast =>
[SrcSpan] -> [ast SrcSpanInfo] -> EP ()
curlyList (SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l) [FieldDecl SrcSpanInfo]
fds
instance ExactP GadtDecl where
exactP :: GadtDecl SrcSpanInfo -> EP ()
exactP (GadtDecl SrcSpanInfo
l Name SrcSpanInfo
n Maybe [TyVarBind SrcSpanInfo]
_mtvs Maybe (Context SrcSpanInfo)
mctxt Maybe [FieldDecl SrcSpanInfo]
ns' Type SrcSpanInfo
t) =
case Maybe [FieldDecl SrcSpanInfo]
ns' of
Maybe [FieldDecl SrcSpanInfo]
Nothing ->
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
[SrcSpan
a] -> do
Name SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactP Name SrcSpanInfo
n
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
a) [Char]
"::"
Type SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Type SrcSpanInfo
t
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: GadtDecl is given wrong number of srcInfoPoints"
Just [FieldDecl SrcSpanInfo]
ts ->
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
(SrcSpan
a:SrcSpan
b:SrcSpan
c:SrcSpan
d:[SrcSpan]
rest) -> do
Name SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Name SrcSpanInfo
n
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
a) [Char]
"::"
(Context SrcSpanInfo -> EP ())
-> Maybe (Context SrcSpanInfo) -> EP ()
forall a. (a -> EP ()) -> Maybe a -> EP ()
maybeEP Context SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Maybe (Context SrcSpanInfo)
mctxt
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
b) [Char]
"{"
[(SrcSpan, [Char])] -> [FieldDecl SrcSpanInfo] -> EP ()
forall (ast :: * -> *) loc.
(ExactP ast, SrcInfo loc) =>
[(loc, [Char])] -> [ast SrcSpanInfo] -> EP ()
printInterleaved' ([SrcSpan] -> [[Char]] -> [(SrcSpan, [Char])]
forall a b. [a] -> [b] -> [(a, b)]
zip [SrcSpan]
rest ([Char] -> [[Char]]
forall a. a -> [a]
repeat [Char]
",")) [FieldDecl SrcSpanInfo]
ts
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
c) [Char]
"}"
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
d) [Char]
"->"
Type SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Type SrcSpanInfo
t
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: GadtDecl is given wrong number of srcInfoPoints"
instance ExactP BangType where
exactP :: BangType SrcSpanInfo -> EP ()
exactP BangType SrcSpanInfo
bt = case BangType SrcSpanInfo
bt of
BangedTy SrcSpanInfo
l -> (Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpanInfo -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpanInfo
l) [Char]
"!"
LazyTy SrcSpanInfo
l -> (Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpanInfo -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpanInfo
l) [Char]
"~"
BangType SrcSpanInfo
_ -> () -> EP ()
forall a. a -> EP a
forall (m :: * -> *) a. Monad m => a -> m a
return ()
instance ExactP Unpackedness where
exactP :: Unpackedness SrcSpanInfo -> EP ()
exactP Unpackedness SrcSpanInfo
bt = case Unpackedness SrcSpanInfo
bt of
Unpack SrcSpanInfo
l ->
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
[SrcSpan
a,SrcSpan
b] -> do
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
a) [Char]
"{-# UNPACK"
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
b) [Char]
"#-}"
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: Unpackedness: Unpack is given wrong number of srcInfoPoints"
NoUnpack SrcSpanInfo
l ->
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
[SrcSpan
a,SrcSpan
b] -> do
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
a) [Char]
"{-# NOUNPACK"
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
b) [Char]
"#-}"
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: Unpackedness: NoUnpack is given wrong number of srcInfoPoints"
NoUnpackPragma {} -> () -> EP ()
forall a. a -> EP a
forall (m :: * -> *) a. Monad m => a -> m a
return ()
instance ExactP Splice where
exactP :: Splice SrcSpanInfo -> EP ()
exactP (IdSplice SrcSpanInfo
_ [Char]
str) = [Char] -> EP ()
printString ([Char] -> EP ()) -> [Char] -> EP ()
forall a b. (a -> b) -> a -> b
$ Char
'$'Char -> ShowS
forall a. a -> [a] -> [a]
:[Char]
str
exactP (TIdSplice SrcSpanInfo
_ [Char]
str) = [Char] -> EP ()
printString ([Char] -> EP ()) -> [Char] -> EP ()
forall a b. (a -> b) -> a -> b
$ [Char]
"$$" [Char] -> ShowS
forall a. [a] -> [a] -> [a]
++ [Char]
str
exactP (ParenSplice SrcSpanInfo
l Exp SrcSpanInfo
e) = [Char] -> [Char] -> SrcSpanInfo -> Exp SrcSpanInfo -> EP ()
forall (ast :: * -> *).
ExactP ast =>
[Char] -> [Char] -> SrcSpanInfo -> ast SrcSpanInfo -> EP ()
printParen [Char]
"ParenSplice" [Char]
"$(" SrcSpanInfo
l Exp SrcSpanInfo
e
exactP (TParenSplice SrcSpanInfo
l Exp SrcSpanInfo
e) = [Char] -> [Char] -> SrcSpanInfo -> Exp SrcSpanInfo -> EP ()
forall (ast :: * -> *).
ExactP ast =>
[Char] -> [Char] -> SrcSpanInfo -> ast SrcSpanInfo -> EP ()
printParen [Char]
"TParenSplice" [Char]
"$$(" SrcSpanInfo
l Exp SrcSpanInfo
e
printParen :: ExactP ast => String -> String -> SrcSpanInfo -> ast SrcSpanInfo -> EP ()
printParen :: forall (ast :: * -> *).
ExactP ast =>
[Char] -> [Char] -> SrcSpanInfo -> ast SrcSpanInfo -> EP ()
printParen [Char]
con [Char]
paren SrcSpanInfo
l ast SrcSpanInfo
e =
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
[SrcSpan
_,SrcSpan
b] -> do
[Char] -> EP ()
printString [Char]
paren
ast SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC ast SrcSpanInfo
e
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
b) [Char]
")"
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP ([Char] -> EP ()) -> [Char] -> EP ()
forall a b. (a -> b) -> a -> b
$ [Char]
"ExactP: Splice: " [Char] -> ShowS
forall a. [a] -> [a] -> [a]
++ [Char]
con [Char] -> ShowS
forall a. [a] -> [a] -> [a]
++ [Char]
" is given wrong number of srcInfoPoints"
instance ExactP Exp where
exactP :: Exp SrcSpanInfo -> EP ()
exactP Exp SrcSpanInfo
exp = case Exp SrcSpanInfo
exp of
Var SrcSpanInfo
_ QName SrcSpanInfo
qn -> QName SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactP QName SrcSpanInfo
qn
OverloadedLabel SrcSpanInfo
_ [Char]
qn -> [Char] -> EP ()
printString (Char
'#'Char -> ShowS
forall a. a -> [a] -> [a]
:[Char]
qn)
IPVar SrcSpanInfo
_ IPName SrcSpanInfo
ipn -> IPName SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactP IPName SrcSpanInfo
ipn
Con SrcSpanInfo
_ QName SrcSpanInfo
qn -> QName SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactP QName SrcSpanInfo
qn
Lit SrcSpanInfo
_ Literal SrcSpanInfo
lit -> Literal SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactP Literal SrcSpanInfo
lit
InfixApp SrcSpanInfo
_ Exp SrcSpanInfo
e1 QOp SrcSpanInfo
op Exp SrcSpanInfo
e2 -> Exp SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactP Exp SrcSpanInfo
e1 EP () -> EP () -> EP ()
forall a b. EP a -> EP b -> EP b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> QOp SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC QOp SrcSpanInfo
op EP () -> EP () -> EP ()
forall a b. EP a -> EP b -> EP b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> Exp SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Exp SrcSpanInfo
e2
App SrcSpanInfo
_ Exp SrcSpanInfo
e1 Exp SrcSpanInfo
e2 -> Exp SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactP Exp SrcSpanInfo
e1 EP () -> EP () -> EP ()
forall a b. EP a -> EP b -> EP b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> Exp SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Exp SrcSpanInfo
e2
NegApp SrcSpanInfo
_ Exp SrcSpanInfo
e -> [Char] -> EP ()
printString [Char]
"-" EP () -> EP () -> EP ()
forall a b. EP a -> EP b -> EP b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> Exp SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Exp SrcSpanInfo
e
Lambda SrcSpanInfo
l [Pat SrcSpanInfo]
ps Exp SrcSpanInfo
e ->
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
[SrcSpan
_,SrcSpan
b] -> do
[Char] -> EP ()
printString [Char]
"\\"
(Pat SrcSpanInfo -> EP ()) -> [Pat SrcSpanInfo] -> EP ()
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> m b) -> t a -> m ()
mapM_ Pat SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC [Pat SrcSpanInfo]
ps
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
b) [Char]
"->"
Exp SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Exp SrcSpanInfo
e
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: Exp: Lambda is given wrong number of srcInfoPoints"
Let SrcSpanInfo
l Binds SrcSpanInfo
bs Exp SrcSpanInfo
e ->
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
[SrcSpan
_,SrcSpan
b] -> do
[Char] -> EP ()
printString [Char]
"let"
Binds SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Binds SrcSpanInfo
bs
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
b) [Char]
"in"
Exp SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Exp SrcSpanInfo
e
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: Exp: Let is given wrong number of srcInfoPoints"
If SrcSpanInfo
l Exp SrcSpanInfo
ec Exp SrcSpanInfo
et Exp SrcSpanInfo
ee ->
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
(SrcSpan
_:SrcSpan
b:SrcSpan
c:[SrcSpan]
rest) -> do
let (Maybe SrcSpan
mpSemi1,SrcSpan
pThen,[SrcSpan]
rest2) =
if (Int, Int) -> Int
forall a b. (a, b) -> b
snd (SrcSpan -> (Int, Int)
spanSize SrcSpan
b) Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
4
then (Maybe SrcSpan
forall a. Maybe a
Nothing, SrcSpan
b, SrcSpan
cSrcSpan -> [SrcSpan] -> [SrcSpan]
forall a. a -> [a] -> [a]
:[SrcSpan]
rest)
else (SrcSpan -> Maybe SrcSpan
forall a. a -> Maybe a
Just SrcSpan
b, SrcSpan
c, [SrcSpan]
rest)
case [SrcSpan]
rest2 of
(SrcSpan
c':[SrcSpan]
rest3) -> do
let (Maybe SrcSpan
mpSemi2,[SrcSpan]
rest4) = if (Int, Int) -> Int
forall a b. (a, b) -> b
snd (SrcSpan -> (Int, Int)
spanSize SrcSpan
c') Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
4
then (Maybe SrcSpan
forall a. Maybe a
Nothing, [SrcSpan]
rest2)
else (SrcSpan -> Maybe SrcSpan
forall a. a -> Maybe a
Just SrcSpan
c', [SrcSpan]
rest3)
case [SrcSpan]
rest4 of
[SrcSpan
pElse] -> do
[Char] -> EP ()
printString [Char]
"if"
Exp SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Exp SrcSpanInfo
ec
(SrcSpan -> EP ()) -> Maybe SrcSpan -> EP ()
forall a. (a -> EP ()) -> Maybe a -> EP ()
maybeEP SrcSpan -> EP ()
printSemi Maybe SrcSpan
mpSemi1
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
pThen) [Char]
"then"
Exp SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Exp SrcSpanInfo
et
(SrcSpan -> EP ()) -> Maybe SrcSpan -> EP ()
forall a. (a -> EP ()) -> Maybe a -> EP ()
maybeEP SrcSpan -> EP ()
printSemi Maybe SrcSpan
mpSemi2
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
pElse) [Char]
"else"
Exp SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Exp SrcSpanInfo
ee
[] -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: Exp: If is given too few srcInfoPoints"
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: Exp: If is given too many srcInfoPoints"
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: Exp: If is given too few srcInfoPoints"
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: Exp: If is given too few srcInfoPoints"
MultiIf SrcSpanInfo
l [GuardedRhs SrcSpanInfo]
alts ->
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
SrcSpan
_:[SrcSpan]
pts -> do
[Char] -> EP ()
printString [Char]
"if"
[SrcSpan] -> [GuardedAlt SrcSpanInfo] -> EP ()
forall (ast :: * -> *).
ExactP ast =>
[SrcSpan] -> [ast SrcSpanInfo] -> EP ()
layoutList [SrcSpan]
pts ((GuardedRhs SrcSpanInfo -> GuardedAlt SrcSpanInfo)
-> [GuardedRhs SrcSpanInfo] -> [GuardedAlt SrcSpanInfo]
forall a b. (a -> b) -> [a] -> [b]
map GuardedRhs SrcSpanInfo -> GuardedAlt SrcSpanInfo
forall l. GuardedRhs l -> GuardedAlt l
GuardedAlt [GuardedRhs SrcSpanInfo]
alts)
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> a
internalError [Char]
"Exp -> MultiIf"
Case SrcSpanInfo
l Exp SrcSpanInfo
e [Alt SrcSpanInfo]
alts ->
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
SrcSpan
_:SrcSpan
b:[SrcSpan]
pts -> do
[Char] -> EP ()
printString [Char]
"case"
Exp SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Exp SrcSpanInfo
e
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
b) [Char]
"of"
[SrcSpan] -> [Alt SrcSpanInfo] -> EP ()
forall (ast :: * -> *).
ExactP ast =>
[SrcSpan] -> [ast SrcSpanInfo] -> EP ()
layoutList [SrcSpan]
pts [Alt SrcSpanInfo]
alts
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: Exp: Case is given too few srcInfoPoints"
Do SrcSpanInfo
l [Stmt SrcSpanInfo]
stmts ->
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
SrcSpan
_:[SrcSpan]
pts -> do
[Char] -> EP ()
printString [Char]
"do"
[SrcSpan] -> [Stmt SrcSpanInfo] -> EP ()
forall (ast :: * -> *).
ExactP ast =>
[SrcSpan] -> [ast SrcSpanInfo] -> EP ()
layoutList [SrcSpan]
pts [Stmt SrcSpanInfo]
stmts
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: Exp: Do is given too few srcInfoPoints"
MDo SrcSpanInfo
l [Stmt SrcSpanInfo]
stmts ->
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
SrcSpan
_:[SrcSpan]
pts -> do
[Char] -> EP ()
printString [Char]
"mdo"
[SrcSpan] -> [Stmt SrcSpanInfo] -> EP ()
forall (ast :: * -> *).
ExactP ast =>
[SrcSpan] -> [ast SrcSpanInfo] -> EP ()
layoutList [SrcSpan]
pts [Stmt SrcSpanInfo]
stmts
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: Exp: Mdo is given wrong number of srcInfoPoints"
Tuple SrcSpanInfo
l Boxed
bx [Exp SrcSpanInfo]
es ->
case Boxed
bx of
Boxed
Boxed -> [SrcSpan] -> [Exp SrcSpanInfo] -> EP ()
forall (ast :: * -> *).
ExactP ast =>
[SrcSpan] -> [ast SrcSpanInfo] -> EP ()
parenList (SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l) [Exp SrcSpanInfo]
es
Boxed
Unboxed -> [SrcSpan] -> [Exp SrcSpanInfo] -> EP ()
forall (ast :: * -> *).
ExactP ast =>
[SrcSpan] -> [ast SrcSpanInfo] -> EP ()
parenHashList (SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l) [Exp SrcSpanInfo]
es
UnboxedSum SrcSpanInfo
l Int
b Int
a Exp SrcSpanInfo
es -> do
SrcSpanInfo -> Int -> Int -> Exp SrcSpanInfo -> EP ()
forall (e :: * -> *).
ExactP e =>
SrcSpanInfo -> Int -> Int -> e SrcSpanInfo -> EP ()
unboxedSumEP SrcSpanInfo
l Int
b Int
a Exp SrcSpanInfo
es
TupleSection SrcSpanInfo
l Boxed
bx [Maybe (Exp SrcSpanInfo)]
mexps -> do
let pts :: [SrcSpan]
pts = SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l
([Char]
o, [Char]
e) = case Boxed
bx of Boxed
Boxed -> ([Char]
"(", [Char]
")"); Boxed
Unboxed -> ([Char]
"(#", [Char]
"#)")
[((Int, Int), EP ())] -> EP ()
printSeq ([((Int, Int), EP ())] -> EP ()) -> [((Int, Int), EP ())] -> EP ()
forall a b. (a -> b) -> a -> b
$ [((Int, Int), EP ())]
-> [((Int, Int), EP ())] -> [((Int, Int), EP ())]
forall a. [a] -> [a] -> [a]
interleave ([(Int, Int)] -> [EP ()] -> [((Int, Int), EP ())]
forall a b. [a] -> [b] -> [(a, b)]
zip ((SrcSpan -> (Int, Int)) -> [SrcSpan] -> [(Int, Int)]
forall a b. (a -> b) -> [a] -> [b]
map SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos ([SrcSpan] -> [(Int, Int)]) -> [SrcSpan] -> [(Int, Int)]
forall a b. (a -> b) -> a -> b
$ [SrcSpan] -> [SrcSpan]
forall a. HasCallStack => [a] -> [a]
init [SrcSpan]
pts) (([Char] -> EP ()) -> [[Char]] -> [EP ()]
forall a b. (a -> b) -> [a] -> [b]
map [Char] -> EP ()
printString ([Char]
o[Char] -> [[Char]] -> [[Char]]
forall a. a -> [a] -> [a]
: [Char] -> [[Char]]
forall a. a -> [a]
repeat [Char]
",")) [((Int, Int), EP ())]
-> [((Int, Int), EP ())] -> [((Int, Int), EP ())]
forall a. [a] -> [a] -> [a]
++ [(SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos (SrcSpan -> (Int, Int)) -> SrcSpan -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ [SrcSpan] -> SrcSpan
forall a. HasCallStack => [a] -> a
last [SrcSpan]
pts, [Char] -> EP ()
printString [Char]
e)])
((Maybe (Exp SrcSpanInfo) -> ((Int, Int), EP ()))
-> [Maybe (Exp SrcSpanInfo)] -> [((Int, Int), EP ())]
forall a b. (a -> b) -> [a] -> [b]
map ((Int, Int)
-> (Exp SrcSpanInfo -> (Int, Int))
-> Maybe (Exp SrcSpanInfo)
-> (Int, Int)
forall b a. b -> (a -> b) -> Maybe a -> b
maybe (Int
0,Int
0) (SrcSpanInfo -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos (SrcSpanInfo -> (Int, Int))
-> (Exp SrcSpanInfo -> SrcSpanInfo)
-> Exp SrcSpanInfo
-> (Int, Int)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Exp SrcSpanInfo -> SrcSpanInfo
forall l. Exp l -> l
forall (ast :: * -> *) l. Annotated ast => ast l -> l
ann) (Maybe (Exp SrcSpanInfo) -> (Int, Int))
-> (Maybe (Exp SrcSpanInfo) -> EP ())
-> Maybe (Exp SrcSpanInfo)
-> ((Int, Int), EP ())
forall b c c'. (b -> c) -> (b -> c') -> b -> (c, c')
forall (a :: * -> * -> *) b c c'.
Arrow a =>
a b c -> a b c' -> a b (c, c')
&&& (Exp SrcSpanInfo -> EP ()) -> Maybe (Exp SrcSpanInfo) -> EP ()
forall a. (a -> EP ()) -> Maybe a -> EP ()
maybeEP Exp SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC) [Maybe (Exp SrcSpanInfo)]
mexps)
List SrcSpanInfo
l [Exp SrcSpanInfo]
es -> [SrcSpan] -> [Exp SrcSpanInfo] -> EP ()
forall (ast :: * -> *).
ExactP ast =>
[SrcSpan] -> [ast SrcSpanInfo] -> EP ()
squareList (SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l) [Exp SrcSpanInfo]
es
ParArray SrcSpanInfo
l [Exp SrcSpanInfo]
es -> [SrcSpan] -> [Exp SrcSpanInfo] -> EP ()
forall (ast :: * -> *).
ExactP ast =>
[SrcSpan] -> [ast SrcSpanInfo] -> EP ()
squareColonList (SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l) [Exp SrcSpanInfo]
es
Paren SrcSpanInfo
l Exp SrcSpanInfo
p -> [SrcSpan] -> [Exp SrcSpanInfo] -> EP ()
forall (ast :: * -> *).
ExactP ast =>
[SrcSpan] -> [ast SrcSpanInfo] -> EP ()
parenList (SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l) [Exp SrcSpanInfo
p]
LeftSection SrcSpanInfo
l Exp SrcSpanInfo
e QOp SrcSpanInfo
qop ->
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
[SrcSpan
_,SrcSpan
b] -> do
[Char] -> EP ()
printString [Char]
"("
Exp SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Exp SrcSpanInfo
e
QOp SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC QOp SrcSpanInfo
qop
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
b) [Char]
")"
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: Exp: LeftSection is given wrong number of srcInfoPoints"
RightSection SrcSpanInfo
l QOp SrcSpanInfo
qop Exp SrcSpanInfo
e ->
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
[SrcSpan
_,SrcSpan
b] -> do
[Char] -> EP ()
printString [Char]
"("
QOp SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC QOp SrcSpanInfo
qop
Exp SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Exp SrcSpanInfo
e
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
b) [Char]
")"
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: Exp: RightSection is given wrong number of srcInfoPoints"
RecConstr SrcSpanInfo
l QName SrcSpanInfo
qn [FieldUpdate SrcSpanInfo]
fups -> do
let pts :: [SrcSpan]
pts = SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l
QName SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactP QName SrcSpanInfo
qn
[SrcSpan] -> [FieldUpdate SrcSpanInfo] -> EP ()
forall (ast :: * -> *).
ExactP ast =>
[SrcSpan] -> [ast SrcSpanInfo] -> EP ()
curlyList [SrcSpan]
pts [FieldUpdate SrcSpanInfo]
fups
RecUpdate SrcSpanInfo
l Exp SrcSpanInfo
e [FieldUpdate SrcSpanInfo]
fups -> do
let pts :: [SrcSpan]
pts = SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l
Exp SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactP Exp SrcSpanInfo
e
[SrcSpan] -> [FieldUpdate SrcSpanInfo] -> EP ()
forall (ast :: * -> *).
ExactP ast =>
[SrcSpan] -> [ast SrcSpanInfo] -> EP ()
curlyList [SrcSpan]
pts [FieldUpdate SrcSpanInfo]
fups
EnumFrom SrcSpanInfo
l Exp SrcSpanInfo
e ->
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
[SrcSpan
_,SrcSpan
b,SrcSpan
c] -> do
[Char] -> EP ()
printString [Char]
"["
Exp SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Exp SrcSpanInfo
e
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
b) [Char]
".."
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
c) [Char]
"]"
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: Exp: EnumFrom is given wrong number of srcInfoPoints"
EnumFromTo SrcSpanInfo
l Exp SrcSpanInfo
e1 Exp SrcSpanInfo
e2 ->
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
[SrcSpan
_,SrcSpan
b,SrcSpan
c] -> do
[Char] -> EP ()
printString [Char]
"["
Exp SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Exp SrcSpanInfo
e1
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
b) [Char]
".."
Exp SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Exp SrcSpanInfo
e2
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
c) [Char]
"]"
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: Exp: EnumFromTo is given wrong number of srcInfoPoints"
EnumFromThen SrcSpanInfo
l Exp SrcSpanInfo
e1 Exp SrcSpanInfo
e2 ->
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
[SrcSpan
_,SrcSpan
b,SrcSpan
c,SrcSpan
d] -> do
[Char] -> EP ()
printString [Char]
"["
Exp SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Exp SrcSpanInfo
e1
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
b) [Char]
","
Exp SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Exp SrcSpanInfo
e2
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
c) [Char]
".."
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
d) [Char]
"]"
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: Exp: EnumFromThen is given wrong number of srcInfoPoints"
EnumFromThenTo SrcSpanInfo
l Exp SrcSpanInfo
e1 Exp SrcSpanInfo
e2 Exp SrcSpanInfo
e3 ->
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
[SrcSpan
_,SrcSpan
b,SrcSpan
c,SrcSpan
d] -> do
[Char] -> EP ()
printString [Char]
"["
Exp SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Exp SrcSpanInfo
e1
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
b) [Char]
","
Exp SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Exp SrcSpanInfo
e2
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
c) [Char]
".."
Exp SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Exp SrcSpanInfo
e3
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
d) [Char]
"]"
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: Exp: EnumFromToThen is given wrong number of srcInfoPoints"
ParArrayFromTo SrcSpanInfo
l Exp SrcSpanInfo
e1 Exp SrcSpanInfo
e2 ->
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
[SrcSpan
_,SrcSpan
b,SrcSpan
c] -> do
[Char] -> EP ()
printString [Char]
"[:"
Exp SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Exp SrcSpanInfo
e1
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
b) [Char]
".."
Exp SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Exp SrcSpanInfo
e2
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
c) [Char]
":]"
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: Exp: ParArrayFromTo is given wrong number of srcInfoPoints"
ParArrayFromThenTo SrcSpanInfo
l Exp SrcSpanInfo
e1 Exp SrcSpanInfo
e2 Exp SrcSpanInfo
e3 ->
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
[SrcSpan
_,SrcSpan
b,SrcSpan
c,SrcSpan
d] -> do
[Char] -> EP ()
printString [Char]
"[:"
Exp SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Exp SrcSpanInfo
e1
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
b) [Char]
","
Exp SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Exp SrcSpanInfo
e2
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
c) [Char]
".."
Exp SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Exp SrcSpanInfo
e3
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
d) [Char]
":]"
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: Exp: ParArrayFromToThen is given wrong number of srcInfoPoints"
ListComp SrcSpanInfo
l Exp SrcSpanInfo
e [QualStmt SrcSpanInfo]
qss ->
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
SrcSpan
_:[SrcSpan]
pts -> do
[Char] -> EP ()
printString [Char]
"["
Exp SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Exp SrcSpanInfo
e
([Char], [Char], [Char])
-> [SrcSpan] -> [QualStmt SrcSpanInfo] -> EP ()
forall (ast :: * -> *).
ExactP ast =>
([Char], [Char], [Char]) -> [SrcSpan] -> [ast SrcSpanInfo] -> EP ()
bracketList ([Char]
"|",[Char]
",",[Char]
"]") [SrcSpan]
pts [QualStmt SrcSpanInfo]
qss
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: Exp: ListComp is given too few srcInfoPoints"
ParComp SrcSpanInfo
l Exp SrcSpanInfo
e [[QualStmt SrcSpanInfo]]
qsss ->
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
SrcSpan
_:[SrcSpan]
pts -> do
let ([[Char]]
strs, [QualStmt SrcSpanInfo]
qss) = [([Char], QualStmt SrcSpanInfo)]
-> ([[Char]], [QualStmt SrcSpanInfo])
forall a b. [(a, b)] -> ([a], [b])
unzip ([([Char], QualStmt SrcSpanInfo)]
-> ([[Char]], [QualStmt SrcSpanInfo]))
-> [([Char], QualStmt SrcSpanInfo)]
-> ([[Char]], [QualStmt SrcSpanInfo])
forall a b. (a -> b) -> a -> b
$ [[QualStmt SrcSpanInfo]] -> [([Char], QualStmt SrcSpanInfo)]
forall {b}. [[b]] -> [([Char], b)]
pairUp [[QualStmt SrcSpanInfo]]
qsss
[Char] -> EP ()
printString [Char]
"["
Exp SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Exp SrcSpanInfo
e
[(SrcSpan, [Char])] -> [QualStmt SrcSpanInfo] -> EP ()
forall (ast :: * -> *) loc.
(ExactP ast, SrcInfo loc) =>
[(loc, [Char])] -> [ast SrcSpanInfo] -> EP ()
printInterleaved ([SrcSpan] -> [[Char]] -> [(SrcSpan, [Char])]
forall a b. [a] -> [b] -> [(a, b)]
zip [SrcSpan]
pts ([[Char]]
strs [[Char]] -> [[Char]] -> [[Char]]
forall a. [a] -> [a] -> [a]
++ [[Char]
"]"])) [QualStmt SrcSpanInfo]
qss
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: Exp: ParComp is given wrong number of srcInfoPoints"
where pairUp :: [[b]] -> [([Char], b)]
pairUp [] = []
pairUp ((b
a:[b]
as):[[b]]
xs) = ([Char]
"|", b
a) ([Char], b) -> [([Char], b)] -> [([Char], b)]
forall a. a -> [a] -> [a]
: [[Char]] -> [b] -> [([Char], b)]
forall a b. [a] -> [b] -> [(a, b)]
zip ([Char] -> [[Char]]
forall a. a -> [a]
repeat [Char]
",") [b]
as [([Char], b)] -> [([Char], b)] -> [([Char], b)]
forall a. [a] -> [a] -> [a]
++ [[b]] -> [([Char], b)]
pairUp [[b]]
xs
pairUp [[b]]
_ = [Char] -> [([Char], b)]
forall a. [Char] -> a
internalError [Char]
"Exp -> ParComp -> pairUp"
ParArrayComp SrcSpanInfo
l Exp SrcSpanInfo
e [[QualStmt SrcSpanInfo]]
qsss ->
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
SrcSpan
_:[SrcSpan]
pts -> do
let ([[Char]]
strs, [QualStmt SrcSpanInfo]
qss) = [([Char], QualStmt SrcSpanInfo)]
-> ([[Char]], [QualStmt SrcSpanInfo])
forall a b. [(a, b)] -> ([a], [b])
unzip ([([Char], QualStmt SrcSpanInfo)]
-> ([[Char]], [QualStmt SrcSpanInfo]))
-> [([Char], QualStmt SrcSpanInfo)]
-> ([[Char]], [QualStmt SrcSpanInfo])
forall a b. (a -> b) -> a -> b
$ [[QualStmt SrcSpanInfo]] -> [([Char], QualStmt SrcSpanInfo)]
forall {b}. [[b]] -> [([Char], b)]
pairUp [[QualStmt SrcSpanInfo]]
qsss
[Char] -> EP ()
printString [Char]
"[:"
Exp SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Exp SrcSpanInfo
e
[(SrcSpan, [Char])] -> [QualStmt SrcSpanInfo] -> EP ()
forall (ast :: * -> *) loc.
(ExactP ast, SrcInfo loc) =>
[(loc, [Char])] -> [ast SrcSpanInfo] -> EP ()
printInterleaved ([SrcSpan] -> [[Char]] -> [(SrcSpan, [Char])]
forall a b. [a] -> [b] -> [(a, b)]
zip [SrcSpan]
pts ([[Char]]
strs [[Char]] -> [[Char]] -> [[Char]]
forall a. [a] -> [a] -> [a]
++ [[Char]
":]"])) [QualStmt SrcSpanInfo]
qss
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: Exp: ParArrayComp is given wrong number of srcInfoPoints"
where pairUp :: [[b]] -> [([Char], b)]
pairUp [] = []
pairUp ((b
a:[b]
as):[[b]]
xs) = ([Char]
"|", b
a) ([Char], b) -> [([Char], b)] -> [([Char], b)]
forall a. a -> [a] -> [a]
: [[Char]] -> [b] -> [([Char], b)]
forall a b. [a] -> [b] -> [(a, b)]
zip ([Char] -> [[Char]]
forall a. a -> [a]
repeat [Char]
"|") [b]
as [([Char], b)] -> [([Char], b)] -> [([Char], b)]
forall a. [a] -> [a] -> [a]
++ [[b]] -> [([Char], b)]
pairUp [[b]]
xs
pairUp [[b]]
_ = [Char] -> [([Char], b)]
forall a. [Char] -> a
internalError [Char]
"Exp -> ParArrayComp -> pairUp"
ExpTypeSig SrcSpanInfo
l Exp SrcSpanInfo
e Type SrcSpanInfo
t ->
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
[SrcSpan
a] -> do
Exp SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactP Exp SrcSpanInfo
e
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
a) [Char]
"::"
Type SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Type SrcSpanInfo
t
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: Exp: ExpTypeSig is given wrong number of srcInfoPoints"
VarQuote SrcSpanInfo
_ QName SrcSpanInfo
qn -> do
[Char] -> EP ()
printString [Char]
"'"
QName SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC QName SrcSpanInfo
qn
TypQuote SrcSpanInfo
_ QName SrcSpanInfo
qn -> do
[Char] -> EP ()
printString [Char]
"''"
QName SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC QName SrcSpanInfo
qn
BracketExp SrcSpanInfo
_ Bracket SrcSpanInfo
br -> Bracket SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactP Bracket SrcSpanInfo
br
SpliceExp SrcSpanInfo
_ Splice SrcSpanInfo
sp -> Splice SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactP Splice SrcSpanInfo
sp
QuasiQuote SrcSpanInfo
_ [Char]
name [Char]
qt -> do
let qtLines :: [[Char]]
qtLines = [Char] -> [[Char]]
lines [Char]
qt
[Char] -> EP ()
printString ([Char] -> EP ()) -> [Char] -> EP ()
forall a b. (a -> b) -> a -> b
$ [Char]
"[" [Char] -> ShowS
forall a. [a] -> [a] -> [a]
++ [Char]
name [Char] -> ShowS
forall a. [a] -> [a] -> [a]
++ [Char]
"|"
[EP ()] -> EP ()
forall (t :: * -> *) (m :: * -> *) a.
(Foldable t, Monad m) =>
t (m a) -> m ()
sequence_ (EP () -> [EP ()] -> [EP ()]
forall a. a -> [a] -> [a]
intersperse EP ()
newLine ([EP ()] -> [EP ()]) -> [EP ()] -> [EP ()]
forall a b. (a -> b) -> a -> b
$ ([Char] -> EP ()) -> [[Char]] -> [EP ()]
forall a b. (a -> b) -> [a] -> [b]
map [Char] -> EP ()
printString [[Char]]
qtLines)
[Char] -> EP ()
printString [Char]
"|]"
XTag SrcSpanInfo
l XName SrcSpanInfo
xn [XAttr SrcSpanInfo]
attrs Maybe (Exp SrcSpanInfo)
mat [Exp SrcSpanInfo]
es ->
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
[SrcSpan
_,SrcSpan
b,SrcSpan
c,SrcSpan
d,SrcSpan
e] -> do
[Char] -> EP ()
printString [Char]
"<"
XName SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC XName SrcSpanInfo
xn
(XAttr SrcSpanInfo -> EP ()) -> [XAttr SrcSpanInfo] -> EP ()
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> m b) -> t a -> m ()
mapM_ XAttr SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC [XAttr SrcSpanInfo]
attrs
(Exp SrcSpanInfo -> EP ()) -> Maybe (Exp SrcSpanInfo) -> EP ()
forall a. (a -> EP ()) -> Maybe a -> EP ()
maybeEP Exp SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Maybe (Exp SrcSpanInfo)
mat
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
b) [Char]
">"
(Exp SrcSpanInfo -> EP ()) -> [Exp SrcSpanInfo] -> EP ()
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> m b) -> t a -> m ()
mapM_ Exp SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC [Exp SrcSpanInfo]
es
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
c) [Char]
"</"
(Int, Int) -> EP ()
printWhitespace (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
d)
XName SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactP XName SrcSpanInfo
xn
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
e) [Char]
">"
[SrcSpan
_,SrcSpan
b,SrcSpan
semi,SrcSpan
c,SrcSpan
d,SrcSpan
e] -> do
[Char] -> EP ()
printString [Char]
"<"
XName SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC XName SrcSpanInfo
xn
(XAttr SrcSpanInfo -> EP ()) -> [XAttr SrcSpanInfo] -> EP ()
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> m b) -> t a -> m ()
mapM_ XAttr SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC [XAttr SrcSpanInfo]
attrs
(Exp SrcSpanInfo -> EP ()) -> Maybe (Exp SrcSpanInfo) -> EP ()
forall a. (a -> EP ()) -> Maybe a -> EP ()
maybeEP Exp SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Maybe (Exp SrcSpanInfo)
mat
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
b) [Char]
">"
(Exp SrcSpanInfo -> EP ()) -> [Exp SrcSpanInfo] -> EP ()
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> m b) -> t a -> m ()
mapM_ Exp SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC [Exp SrcSpanInfo]
es
SrcSpan -> EP ()
printSemi SrcSpan
semi
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
c) [Char]
"</"
(Int, Int) -> EP ()
printWhitespace (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
d)
XName SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactP XName SrcSpanInfo
xn
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
e) [Char]
">"
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: Exp: XTag is given wrong number of srcInfoPoints"
XETag SrcSpanInfo
l XName SrcSpanInfo
xn [XAttr SrcSpanInfo]
attrs Maybe (Exp SrcSpanInfo)
mat ->
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
[SrcSpan
_,SrcSpan
b] -> do
[Char] -> EP ()
printString [Char]
"<"
XName SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC XName SrcSpanInfo
xn
(XAttr SrcSpanInfo -> EP ()) -> [XAttr SrcSpanInfo] -> EP ()
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> m b) -> t a -> m ()
mapM_ XAttr SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC [XAttr SrcSpanInfo]
attrs
(Exp SrcSpanInfo -> EP ()) -> Maybe (Exp SrcSpanInfo) -> EP ()
forall a. (a -> EP ()) -> Maybe a -> EP ()
maybeEP Exp SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Maybe (Exp SrcSpanInfo)
mat
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
b) [Char]
"/>"
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: Exp: XETag is given wrong number of srcInfoPoints"
XPcdata SrcSpanInfo
_ [Char]
str -> do
let strLines :: [[Char]]
strLines = [Char] -> [[Char]]
lines [Char]
str
[EP ()] -> EP ()
forall (t :: * -> *) (m :: * -> *) a.
(Foldable t, Monad m) =>
t (m a) -> m ()
sequence_ (EP () -> [EP ()] -> [EP ()]
forall a. a -> [a] -> [a]
intersperse EP ()
newLine ([EP ()] -> [EP ()]) -> [EP ()] -> [EP ()]
forall a b. (a -> b) -> a -> b
$ ([Char] -> EP ()) -> [[Char]] -> [EP ()]
forall a b. (a -> b) -> [a] -> [b]
map [Char] -> EP ()
printString [[Char]]
strLines)
XExpTag SrcSpanInfo
l Exp SrcSpanInfo
e ->
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
[SrcSpan
_,SrcSpan
b] -> do
[Char] -> EP ()
printString [Char]
"<%"
Exp SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Exp SrcSpanInfo
e
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
b) [Char]
"%>"
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: Exp: XExpTag is given wrong number of srcInfoPoints"
XChildTag SrcSpanInfo
l [Exp SrcSpanInfo]
es ->
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
[SrcSpan
_,SrcSpan
b,SrcSpan
c] -> do
[Char] -> EP ()
printString [Char]
"<%>"
(Exp SrcSpanInfo -> EP ()) -> [Exp SrcSpanInfo] -> EP ()
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> m b) -> t a -> m ()
mapM_ Exp SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC [Exp SrcSpanInfo]
es
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
b) [Char]
"</"
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
c) [Char]
"%>"
[SrcSpan
_,SrcSpan
semi,SrcSpan
b,SrcSpan
c] -> do
[Char] -> EP ()
printString [Char]
"<%>"
(Exp SrcSpanInfo -> EP ()) -> [Exp SrcSpanInfo] -> EP ()
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> m b) -> t a -> m ()
mapM_ Exp SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC [Exp SrcSpanInfo]
es
SrcSpan -> EP ()
printSemi SrcSpan
semi
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
b) [Char]
"</"
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
c) [Char]
"%>"
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: Exp: XChildTag is given wrong number of srcInfoPoints"
CorePragma SrcSpanInfo
l [Char]
str Exp SrcSpanInfo
e ->
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
[SrcSpan
_,SrcSpan
b] -> do
[Char] -> EP ()
printString ([Char] -> EP ()) -> [Char] -> EP ()
forall a b. (a -> b) -> a -> b
$ [Char]
"{-# CORE " [Char] -> ShowS
forall a. [a] -> [a] -> [a]
++ ShowS
forall a. Show a => a -> [Char]
show [Char]
str
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
b) [Char]
"#-}"
Exp SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Exp SrcSpanInfo
e
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: Exp: CorePragma is given wrong number of srcInfoPoints"
SCCPragma SrcSpanInfo
l [Char]
str Exp SrcSpanInfo
e ->
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
[SrcSpan
_,SrcSpan
b] -> do
[Char] -> EP ()
printString ([Char] -> EP ()) -> [Char] -> EP ()
forall a b. (a -> b) -> a -> b
$ [Char]
"{-# SCC " [Char] -> ShowS
forall a. [a] -> [a] -> [a]
++ ShowS
forall a. Show a => a -> [Char]
show [Char]
str
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
b) [Char]
"#-}"
Exp SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Exp SrcSpanInfo
e
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: Exp: SCCPragma is given wrong number of srcInfoPoints"
GenPragma SrcSpanInfo
l [Char]
str (Int
i1,Int
i2) (Int
i3,Int
i4) Exp SrcSpanInfo
e -> do
[(SrcSpan, [Char])] -> EP ()
forall loc. SrcInfo loc => [(loc, [Char])] -> EP ()
printStrs ([(SrcSpan, [Char])] -> EP ()) -> [(SrcSpan, [Char])] -> EP ()
forall a b. (a -> b) -> a -> b
$ [SrcSpan] -> [[Char]] -> [(SrcSpan, [Char])]
forall a b. [a] -> [b] -> [(a, b)]
zip (SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l) [[Char]
"{-# GENERATED", ShowS
forall a. Show a => a -> [Char]
show [Char]
str, Int -> [Char]
forall a. Show a => a -> [Char]
show Int
i1, [Char]
":", Int -> [Char]
forall a. Show a => a -> [Char]
show Int
i2, [Char]
"-", Int -> [Char]
forall a. Show a => a -> [Char]
show Int
i3, [Char]
":", Int -> [Char]
forall a. Show a => a -> [Char]
show Int
i4, [Char]
"#-}"]
Exp SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Exp SrcSpanInfo
e
Proc SrcSpanInfo
l Pat SrcSpanInfo
p Exp SrcSpanInfo
e ->
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
[SrcSpan
_,SrcSpan
b] -> do
[Char] -> EP ()
printString [Char]
"proc"
Pat SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Pat SrcSpanInfo
p
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
b) [Char]
"->"
Exp SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Exp SrcSpanInfo
e
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: Exp: Proc is given wrong number of srcInfoPoints"
LeftArrApp SrcSpanInfo
l Exp SrcSpanInfo
e1 Exp SrcSpanInfo
e2 ->
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
[SrcSpan
a] -> do
Exp SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactP Exp SrcSpanInfo
e1
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
a) [Char]
"-<"
Exp SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Exp SrcSpanInfo
e2
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: Exp: LeftArrApp is given wrong number of srcInfoPoints"
RightArrApp SrcSpanInfo
l Exp SrcSpanInfo
e1 Exp SrcSpanInfo
e2 ->
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
[SrcSpan
a] -> do
Exp SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactP Exp SrcSpanInfo
e1
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
a) [Char]
">-"
Exp SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Exp SrcSpanInfo
e2
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: Exp: RightArrApp is given wrong number of srcInfoPoints"
LeftArrHighApp SrcSpanInfo
l Exp SrcSpanInfo
e1 Exp SrcSpanInfo
e2 ->
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
[SrcSpan
a] -> do
Exp SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactP Exp SrcSpanInfo
e1
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
a) [Char]
"-<<"
Exp SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Exp SrcSpanInfo
e2
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: Exp: LeftArrHighApp is given wrong number of srcInfoPoints"
RightArrHighApp SrcSpanInfo
l Exp SrcSpanInfo
e1 Exp SrcSpanInfo
e2 ->
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
[SrcSpan
a] -> do
Exp SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactP Exp SrcSpanInfo
e1
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
a) [Char]
">>-"
Exp SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Exp SrcSpanInfo
e2
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: Exp: RightArrHighApp is given wrong number of srcInfoPoints"
ArrOp SrcSpanInfo
l Exp SrcSpanInfo
e -> case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
[SrcSpan
a, SrcSpan
b] -> do
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
a) [Char]
"(|"
Exp SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Exp SrcSpanInfo
e
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
b) [Char]
"|)"
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: Exp: ArrOp is given wrong number of srcInfoPoints"
LCase SrcSpanInfo
l [Alt SrcSpanInfo]
alts ->
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
SrcSpan
_:SrcSpan
b:[SrcSpan]
pts -> do
[Char] -> EP ()
printString [Char]
"\\"
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
b) [Char]
"case"
[SrcSpan] -> [Alt SrcSpanInfo] -> EP ()
forall (ast :: * -> *).
ExactP ast =>
[SrcSpan] -> [ast SrcSpanInfo] -> EP ()
layoutList [SrcSpan]
pts [Alt SrcSpanInfo]
alts
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: Exp: LCase is given wrong number of srcInfoPoints"
TypeApp SrcSpanInfo
_ Type SrcSpanInfo
ty -> [Char] -> EP ()
printString [Char]
"@" EP () -> EP () -> EP ()
forall a b. EP a -> EP b -> EP b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> Type SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactP Type SrcSpanInfo
ty
unboxedSumEP :: ExactP e => SrcSpanInfo -> Int -> Int -> e SrcSpanInfo -> EP ()
unboxedSumEP :: forall (e :: * -> *).
ExactP e =>
SrcSpanInfo -> Int -> Int -> e SrcSpanInfo -> EP ()
unboxedSumEP SrcSpanInfo
l Int
b Int
_a e SrcSpanInfo
es = do
let (SrcSpan
opt:[SrcSpan]
pts) = SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l
([Char]
o, [Char]
e) = ([Char]
"(#", [Char]
"#)")
bars :: [((Int, Int), EP ())]
bars = [(Int, Int)] -> [EP ()] -> [((Int, Int), EP ())]
forall a b. [a] -> [b] -> [(a, b)]
zip ((SrcSpan -> (Int, Int)) -> [SrcSpan] -> [(Int, Int)]
forall a b. (a -> b) -> [a] -> [b]
map SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos ([SrcSpan] -> [SrcSpan]
forall a. HasCallStack => [a] -> [a]
init [SrcSpan]
pts)) (([Char] -> EP ()) -> [[Char]] -> [EP ()]
forall a b. (a -> b) -> [a] -> [b]
map [Char] -> EP ()
printString ([Char] -> [[Char]]
forall a. a -> [a]
repeat [Char]
"|"))
open :: ((Int, Int), EP ())
open = (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
opt, [Char] -> EP ()
printString [Char]
o)
close :: ((Int, Int), EP ())
close = (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos ([SrcSpan] -> SrcSpan
forall a. HasCallStack => [a] -> a
last [SrcSpan]
pts), [Char] -> EP ()
printString [Char]
e)
fs :: [((Int, Int), EP ())]
fs = Int -> [((Int, Int), EP ())] -> [((Int, Int), EP ())]
forall a. Int -> [a] -> [a]
take Int
b [((Int, Int), EP ())]
bars
as :: [((Int, Int), EP ())]
as = Int -> [((Int, Int), EP ())] -> [((Int, Int), EP ())]
forall a. Int -> [a] -> [a]
drop Int
b [((Int, Int), EP ())]
bars
[((Int, Int), EP ())] -> EP ()
printSeq ([((Int, Int), EP ())] -> EP ()) -> [((Int, Int), EP ())] -> EP ()
forall a b. (a -> b) -> a -> b
$ ((Int, Int), EP ())
open ((Int, Int), EP ())
-> [((Int, Int), EP ())] -> [((Int, Int), EP ())]
forall a. a -> [a] -> [a]
: [((Int, Int), EP ())]
fs [((Int, Int), EP ())]
-> [((Int, Int), EP ())] -> [((Int, Int), EP ())]
forall a. [a] -> [a] -> [a]
++ [((Int
0, Int
0), e SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC e SrcSpanInfo
es)] [((Int, Int), EP ())]
-> [((Int, Int), EP ())] -> [((Int, Int), EP ())]
forall a. [a] -> [a] -> [a]
++ [((Int, Int), EP ())]
as [((Int, Int), EP ())]
-> [((Int, Int), EP ())] -> [((Int, Int), EP ())]
forall a. [a] -> [a] -> [a]
++ [((Int, Int), EP ())
close]
instance ExactP FieldUpdate where
exactP :: FieldUpdate SrcSpanInfo -> EP ()
exactP FieldUpdate SrcSpanInfo
fup = case FieldUpdate SrcSpanInfo
fup of
FieldUpdate SrcSpanInfo
l QName SrcSpanInfo
qn Exp SrcSpanInfo
e ->
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
[SrcSpan
a] -> do
QName SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactP QName SrcSpanInfo
qn
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
a) [Char]
"="
Exp SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Exp SrcSpanInfo
e
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: FieldUpdate is given wrong number of srcInfoPoints"
FieldPun SrcSpanInfo
_ QName SrcSpanInfo
n -> QName SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactP QName SrcSpanInfo
n
FieldWildcard SrcSpanInfo
_ -> [Char] -> EP ()
printString [Char]
".."
instance ExactP Stmt where
exactP :: Stmt SrcSpanInfo -> EP ()
exactP Stmt SrcSpanInfo
stmt = case Stmt SrcSpanInfo
stmt of
Generator SrcSpanInfo
l Pat SrcSpanInfo
p Exp SrcSpanInfo
e ->
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
[SrcSpan
a] -> do
Pat SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactP Pat SrcSpanInfo
p
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
a) [Char]
"<-"
Exp SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Exp SrcSpanInfo
e
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: Stmt: Generator is given wrong number of srcInfoPoints"
Qualifier SrcSpanInfo
_ Exp SrcSpanInfo
e -> Exp SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactP Exp SrcSpanInfo
e
LetStmt SrcSpanInfo
_ Binds SrcSpanInfo
bds -> do
[Char] -> EP ()
printString [Char]
"let"
Binds SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Binds SrcSpanInfo
bds
RecStmt SrcSpanInfo
l [Stmt SrcSpanInfo]
ss ->
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
SrcSpan
_:[SrcSpan]
pts -> do
[Char] -> EP ()
printString [Char]
"rec"
[SrcSpan] -> [Stmt SrcSpanInfo] -> EP ()
forall (ast :: * -> *).
ExactP ast =>
[SrcSpan] -> [ast SrcSpanInfo] -> EP ()
layoutList [SrcSpan]
pts [Stmt SrcSpanInfo]
ss
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: Stmt: RecStmt is given too few srcInfoPoints"
instance ExactP QualStmt where
exactP :: QualStmt SrcSpanInfo -> EP ()
exactP QualStmt SrcSpanInfo
qstmt = case QualStmt SrcSpanInfo
qstmt of
QualStmt SrcSpanInfo
_ Stmt SrcSpanInfo
stmt -> Stmt SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactP Stmt SrcSpanInfo
stmt
ThenTrans SrcSpanInfo
_ Exp SrcSpanInfo
e -> [Char] -> EP ()
printString [Char]
"then" EP () -> EP () -> EP ()
forall a b. EP a -> EP b -> EP b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> Exp SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Exp SrcSpanInfo
e
ThenBy SrcSpanInfo
l Exp SrcSpanInfo
e1 Exp SrcSpanInfo
e2 ->
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
[SrcSpan
_,SrcSpan
b] -> do
[Char] -> EP ()
printString [Char]
"then"
Exp SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Exp SrcSpanInfo
e1
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
b) [Char]
"by"
Exp SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Exp SrcSpanInfo
e2
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: QualStmt: ThenBy is given wrong number of srcInfoPoints"
GroupBy SrcSpanInfo
l Exp SrcSpanInfo
e -> do
[(SrcSpan, [Char])] -> EP ()
forall loc. SrcInfo loc => [(loc, [Char])] -> EP ()
printStrs ([(SrcSpan, [Char])] -> EP ()) -> [(SrcSpan, [Char])] -> EP ()
forall a b. (a -> b) -> a -> b
$ [SrcSpan] -> [[Char]] -> [(SrcSpan, [Char])]
forall a b. [a] -> [b] -> [(a, b)]
zip (SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l) [[Char]
"then",[Char]
"group",[Char]
"by"]
Exp SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Exp SrcSpanInfo
e
GroupUsing SrcSpanInfo
l Exp SrcSpanInfo
e -> do
[(SrcSpan, [Char])] -> EP ()
forall loc. SrcInfo loc => [(loc, [Char])] -> EP ()
printStrs ([(SrcSpan, [Char])] -> EP ()) -> [(SrcSpan, [Char])] -> EP ()
forall a b. (a -> b) -> a -> b
$ [SrcSpan] -> [[Char]] -> [(SrcSpan, [Char])]
forall a b. [a] -> [b] -> [(a, b)]
zip (SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l) [[Char]
"then",[Char]
"group",[Char]
"using"]
Exp SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Exp SrcSpanInfo
e
GroupByUsing SrcSpanInfo
l Exp SrcSpanInfo
e1 Exp SrcSpanInfo
e2 -> do
let pts :: [SrcSpan]
pts = SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l
[(SrcSpan, [Char])] -> EP ()
forall loc. SrcInfo loc => [(loc, [Char])] -> EP ()
printStrs ([(SrcSpan, [Char])] -> EP ()) -> [(SrcSpan, [Char])] -> EP ()
forall a b. (a -> b) -> a -> b
$ [SrcSpan] -> [[Char]] -> [(SrcSpan, [Char])]
forall a b. [a] -> [b] -> [(a, b)]
zip ([SrcSpan] -> [SrcSpan]
forall a. HasCallStack => [a] -> [a]
init [SrcSpan]
pts) [[Char]
"then",[Char]
"group",[Char]
"by"]
Exp SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Exp SrcSpanInfo
e1
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos ([SrcSpan] -> SrcSpan
forall a. HasCallStack => [a] -> a
last [SrcSpan]
pts)) [Char]
"using"
Exp SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Exp SrcSpanInfo
e2
instance ExactP Bracket where
exactP :: Bracket SrcSpanInfo -> EP ()
exactP Bracket SrcSpanInfo
br = case Bracket SrcSpanInfo
br of
ExpBracket SrcSpanInfo
l Exp SrcSpanInfo
e -> [Char]
-> [Char] -> [Char] -> SrcSpanInfo -> Exp SrcSpanInfo -> EP ()
forall (ast :: * -> *).
ExactP ast =>
[Char]
-> [Char] -> [Char] -> SrcSpanInfo -> ast SrcSpanInfo -> EP ()
printBracket [Char]
"ExpBracket" [Char]
"[|" [Char]
"|]" SrcSpanInfo
l Exp SrcSpanInfo
e
TExpBracket SrcSpanInfo
l Exp SrcSpanInfo
e -> [Char]
-> [Char] -> [Char] -> SrcSpanInfo -> Exp SrcSpanInfo -> EP ()
forall (ast :: * -> *).
ExactP ast =>
[Char]
-> [Char] -> [Char] -> SrcSpanInfo -> ast SrcSpanInfo -> EP ()
printBracket [Char]
"TExpBracket" [Char]
"[||" [Char]
"||]" SrcSpanInfo
l Exp SrcSpanInfo
e
PatBracket SrcSpanInfo
l Pat SrcSpanInfo
p -> [Char]
-> [Char] -> [Char] -> SrcSpanInfo -> Pat SrcSpanInfo -> EP ()
forall (ast :: * -> *).
ExactP ast =>
[Char]
-> [Char] -> [Char] -> SrcSpanInfo -> ast SrcSpanInfo -> EP ()
printBracket [Char]
"PatBracket" [Char]
"[p|" [Char]
"|]" SrcSpanInfo
l Pat SrcSpanInfo
p
TypeBracket SrcSpanInfo
l Type SrcSpanInfo
t -> [Char]
-> [Char] -> [Char] -> SrcSpanInfo -> Type SrcSpanInfo -> EP ()
forall (ast :: * -> *).
ExactP ast =>
[Char]
-> [Char] -> [Char] -> SrcSpanInfo -> ast SrcSpanInfo -> EP ()
printBracket [Char]
"TypeBracket" [Char]
"[t|" [Char]
"|]" SrcSpanInfo
l Type SrcSpanInfo
t
DeclBracket SrcSpanInfo
l [Decl SrcSpanInfo]
ds ->
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
pts :: [SrcSpan]
pts@(SrcSpan
_:[SrcSpan]
_) -> do
[Char] -> EP ()
printString [Char]
"[d|"
[SrcSpan] -> [Decl SrcSpanInfo] -> EP ()
forall (ast :: * -> *).
ExactP ast =>
[SrcSpan] -> [ast SrcSpanInfo] -> EP ()
layoutList ([SrcSpan] -> [SrcSpan]
forall a. HasCallStack => [a] -> [a]
init [SrcSpan]
pts) ([Decl SrcSpanInfo] -> [Decl SrcSpanInfo]
sepFunBinds [Decl SrcSpanInfo]
ds)
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos ([SrcSpan] -> SrcSpan
forall a. HasCallStack => [a] -> a
last [SrcSpan]
pts)) [Char]
"|]"
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: Bracket: DeclBracket is given too few srcInfoPoints"
printBracket :: ExactP ast => String -> String -> String -> SrcSpanInfo -> ast SrcSpanInfo -> EP ()
printBracket :: forall (ast :: * -> *).
ExactP ast =>
[Char]
-> [Char] -> [Char] -> SrcSpanInfo -> ast SrcSpanInfo -> EP ()
printBracket [Char]
con [Char]
oBracket [Char]
cBracket SrcSpanInfo
l ast SrcSpanInfo
c =
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
[SrcSpan
_,SrcSpan
b] -> do
[Char] -> EP ()
printString [Char]
oBracket
ast SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC ast SrcSpanInfo
c
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
b) [Char]
cBracket
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP ([Char] -> EP ()) -> [Char] -> EP ()
forall a b. (a -> b) -> a -> b
$ [Char]
"ExactP: Bracket: " [Char] -> ShowS
forall a. [a] -> [a] -> [a]
++ [Char]
con [Char] -> ShowS
forall a. [a] -> [a] -> [a]
++ [Char]
" is given wrong number of srcInfoPoints"
instance ExactP XAttr where
exactP :: XAttr SrcSpanInfo -> EP ()
exactP (XAttr SrcSpanInfo
l XName SrcSpanInfo
xn Exp SrcSpanInfo
e) =
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
[SrcSpan
a] -> do
XName SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactP XName SrcSpanInfo
xn
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
a) [Char]
"="
Exp SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Exp SrcSpanInfo
e
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: XAttr is given wrong number of srcInfoPoints"
instance ExactP Alt where
exactP :: Alt SrcSpanInfo -> EP ()
exactP (Alt SrcSpanInfo
l Pat SrcSpanInfo
p Rhs SrcSpanInfo
galts Maybe (Binds SrcSpanInfo)
mbs) = do
Pat SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactP Pat SrcSpanInfo
p
GuardedAlts SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC (Rhs SrcSpanInfo -> GuardedAlts SrcSpanInfo
forall l. Rhs l -> GuardedAlts l
GuardedAlts Rhs SrcSpanInfo
galts)
(Binds SrcSpanInfo -> EP ()) -> Maybe (Binds SrcSpanInfo) -> EP ()
forall a. (a -> EP ()) -> Maybe a -> EP ()
maybeEP (\Binds SrcSpanInfo
bs -> (Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos ([SrcSpan] -> SrcSpan
forall a. HasCallStack => [a] -> a
head (SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l))) [Char]
"where" EP () -> EP () -> EP ()
forall a b. EP a -> EP b -> EP b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> Binds SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Binds SrcSpanInfo
bs) Maybe (Binds SrcSpanInfo)
mbs
instance ExactP Match where
exactP :: Match SrcSpanInfo -> EP ()
exactP (Match SrcSpanInfo
l Name SrcSpanInfo
n [Pat SrcSpanInfo]
ps Rhs SrcSpanInfo
rhs Maybe (Binds SrcSpanInfo)
mbinds) = do
let pts :: [SrcSpan]
pts = SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l
len :: Int
len = [SrcSpan] -> Int
forall a. [a] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [SrcSpan]
pts
pars :: Int
pars = Int
len Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div` Int
2
([SrcSpan]
oPars,[SrcSpan]
cParsWh) = Int -> [SrcSpan] -> ([SrcSpan], [SrcSpan])
forall a. Int -> [a] -> ([a], [a])
splitAt Int
pars [SrcSpan]
pts
([SrcSpan]
cPars,[SrcSpan]
_) = Int -> [SrcSpan] -> ([SrcSpan], [SrcSpan])
forall a. Int -> [a] -> ([a], [a])
splitAt Int
pars [SrcSpan]
cParsWh
[(SrcSpan, [Char])] -> EP ()
forall loc. SrcInfo loc => [(loc, [Char])] -> EP ()
printStrs ([SrcSpan] -> [[Char]] -> [(SrcSpan, [Char])]
forall a b. [a] -> [b] -> [(a, b)]
zip [SrcSpan]
oPars ([Char] -> [[Char]]
forall a. a -> [a]
repeat [Char]
"("))
Name SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Name SrcSpanInfo
n
[((Int, Int), EP ())] -> [((Int, Int), EP ())] -> EP ()
printStreams ([(Int, Int)] -> [EP ()] -> [((Int, Int), EP ())]
forall a b. [a] -> [b] -> [(a, b)]
zip ((SrcSpan -> (Int, Int)) -> [SrcSpan] -> [(Int, Int)]
forall a b. (a -> b) -> [a] -> [b]
map SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos [SrcSpan]
cPars) (EP () -> [EP ()]
forall a. a -> [a]
repeat (EP () -> [EP ()]) -> EP () -> [EP ()]
forall a b. (a -> b) -> a -> b
$ [Char] -> EP ()
printString [Char]
")")) ((Pat SrcSpanInfo -> ((Int, Int), EP ()))
-> [Pat SrcSpanInfo] -> [((Int, Int), EP ())]
forall a b. (a -> b) -> [a] -> [b]
map (SrcSpanInfo -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos (SrcSpanInfo -> (Int, Int))
-> (Pat SrcSpanInfo -> SrcSpanInfo)
-> Pat SrcSpanInfo
-> (Int, Int)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Pat SrcSpanInfo -> SrcSpanInfo
forall l. Pat l -> l
forall (ast :: * -> *) l. Annotated ast => ast l -> l
ann (Pat SrcSpanInfo -> (Int, Int))
-> (Pat SrcSpanInfo -> EP ())
-> Pat SrcSpanInfo
-> ((Int, Int), EP ())
forall b c c'. (b -> c) -> (b -> c') -> b -> (c, c')
forall (a :: * -> * -> *) b c c'.
Arrow a =>
a b c -> a b c' -> a b (c, c')
&&& Pat SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC) [Pat SrcSpanInfo]
ps)
Rhs SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Rhs SrcSpanInfo
rhs
(Binds SrcSpanInfo -> EP ()) -> Maybe (Binds SrcSpanInfo) -> EP ()
forall a. (a -> EP ()) -> Maybe a -> EP ()
maybeEP (\Binds SrcSpanInfo
bds -> (Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos ([SrcSpan] -> SrcSpan
forall a. HasCallStack => [a] -> a
head [SrcSpan]
pts)) [Char]
"where" EP () -> EP () -> EP ()
forall a b. EP a -> EP b -> EP b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> Binds SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Binds SrcSpanInfo
bds) Maybe (Binds SrcSpanInfo)
mbinds
exactP (InfixMatch SrcSpanInfo
l Pat SrcSpanInfo
a Name SrcSpanInfo
n [Pat SrcSpanInfo]
bs Rhs SrcSpanInfo
rhs Maybe (Binds SrcSpanInfo)
mbinds) = do
let pts :: [SrcSpan]
pts = SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l
len :: Int
len = [SrcSpan] -> Int
forall a. [a] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [SrcSpan]
pts
pars :: Int
pars = Int
len Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div` Int
2
([SrcSpan]
oPars,[SrcSpan]
cParsWh) = Int -> [SrcSpan] -> ([SrcSpan], [SrcSpan])
forall a. Int -> [a] -> ([a], [a])
splitAt Int
pars [SrcSpan]
pts
([SrcSpan]
cPars,[SrcSpan]
whPt) = Int -> [SrcSpan] -> ([SrcSpan], [SrcSpan])
forall a. Int -> [a] -> ([a], [a])
splitAt Int
pars [SrcSpan]
cParsWh
[(SrcSpan, [Char])] -> EP ()
forall loc. SrcInfo loc => [(loc, [Char])] -> EP ()
printStrs ([SrcSpan] -> [[Char]] -> [(SrcSpan, [Char])]
forall a b. [a] -> [b] -> [(a, b)]
zip [SrcSpan]
oPars ([Char] -> [[Char]]
forall a. a -> [a]
repeat [Char]
"("))
Pat SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Pat SrcSpanInfo
a
Name SrcSpanInfo -> EP ()
epInfixName Name SrcSpanInfo
n
[(SrcSpan, [Char])] -> [Pat SrcSpanInfo] -> EP ()
forall (ast :: * -> *) loc.
(ExactP ast, SrcInfo loc) =>
[(loc, [Char])] -> [ast SrcSpanInfo] -> EP ()
printInterleaved' ([SrcSpan] -> [[Char]] -> [(SrcSpan, [Char])]
forall a b. [a] -> [b] -> [(a, b)]
zip [SrcSpan]
cPars ([Char] -> [[Char]]
forall a. a -> [a]
repeat [Char]
")")) [Pat SrcSpanInfo]
bs
Rhs SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Rhs SrcSpanInfo
rhs
(Binds SrcSpanInfo -> EP ()) -> Maybe (Binds SrcSpanInfo) -> EP ()
forall a. (a -> EP ()) -> Maybe a -> EP ()
maybeEP (\Binds SrcSpanInfo
bds -> (Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos ([SrcSpan] -> SrcSpan
forall a. HasCallStack => [a] -> a
head [SrcSpan]
whPt)) [Char]
"where" EP () -> EP () -> EP ()
forall a b. EP a -> EP b -> EP b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> Binds SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Binds SrcSpanInfo
bds) Maybe (Binds SrcSpanInfo)
mbinds
instance ExactP Rhs where
exactP :: Rhs SrcSpanInfo -> EP ()
exactP (UnGuardedRhs SrcSpanInfo
_ Exp SrcSpanInfo
e) = [Char] -> EP ()
printString [Char]
"=" EP () -> EP () -> EP ()
forall a b. EP a -> EP b -> EP b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> Exp SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Exp SrcSpanInfo
e
exactP (GuardedRhss SrcSpanInfo
_ [GuardedRhs SrcSpanInfo]
grhss) = (GuardedRhs SrcSpanInfo -> EP ())
-> [GuardedRhs SrcSpanInfo] -> EP ()
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> m b) -> t a -> m ()
mapM_ GuardedRhs SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC [GuardedRhs SrcSpanInfo]
grhss
instance ExactP GuardedRhs where
exactP :: GuardedRhs SrcSpanInfo -> EP ()
exactP (GuardedRhs SrcSpanInfo
l [Stmt SrcSpanInfo]
ss Exp SrcSpanInfo
e) =
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
SrcSpan
_:[SrcSpan]
pts -> do
[Char] -> EP ()
printString [Char]
"|"
[(SrcSpan, [Char])] -> [Stmt SrcSpanInfo] -> EP ()
forall (ast :: * -> *) loc.
(ExactP ast, SrcInfo loc) =>
[(loc, [Char])] -> [ast SrcSpanInfo] -> EP ()
printInterleaved' ([SrcSpan] -> [[Char]] -> [(SrcSpan, [Char])]
forall a b. [a] -> [b] -> [(a, b)]
zip ([SrcSpan] -> [SrcSpan]
forall a. HasCallStack => [a] -> [a]
init [SrcSpan]
pts) ([Char] -> [[Char]]
forall a. a -> [a]
repeat [Char]
",") [(SrcSpan, [Char])] -> [(SrcSpan, [Char])] -> [(SrcSpan, [Char])]
forall a. [a] -> [a] -> [a]
++ [([SrcSpan] -> SrcSpan
forall a. HasCallStack => [a] -> a
last [SrcSpan]
pts, [Char]
"=")]) [Stmt SrcSpanInfo]
ss
Exp SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Exp SrcSpanInfo
e
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: GuardedRhs is given wrong number of srcInfoPoints"
newtype GuardedAlts l = GuardedAlts (Rhs l)
deriving ((forall a b. (a -> b) -> GuardedAlts a -> GuardedAlts b)
-> (forall a b. a -> GuardedAlts b -> GuardedAlts a)
-> Functor GuardedAlts
forall a b. a -> GuardedAlts b -> GuardedAlts a
forall a b. (a -> b) -> GuardedAlts a -> GuardedAlts b
forall (f :: * -> *).
(forall a b. (a -> b) -> f a -> f b)
-> (forall a b. a -> f b -> f a) -> Functor f
$cfmap :: forall a b. (a -> b) -> GuardedAlts a -> GuardedAlts b
fmap :: forall a b. (a -> b) -> GuardedAlts a -> GuardedAlts b
$c<$ :: forall a b. a -> GuardedAlts b -> GuardedAlts a
<$ :: forall a b. a -> GuardedAlts b -> GuardedAlts a
Functor, Int -> GuardedAlts l -> ShowS
[GuardedAlts l] -> ShowS
GuardedAlts l -> [Char]
(Int -> GuardedAlts l -> ShowS)
-> (GuardedAlts l -> [Char])
-> ([GuardedAlts l] -> ShowS)
-> Show (GuardedAlts l)
forall l. Show l => Int -> GuardedAlts l -> ShowS
forall l. Show l => [GuardedAlts l] -> ShowS
forall l. Show l => GuardedAlts l -> [Char]
forall a.
(Int -> a -> ShowS) -> (a -> [Char]) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: forall l. Show l => Int -> GuardedAlts l -> ShowS
showsPrec :: Int -> GuardedAlts l -> ShowS
$cshow :: forall l. Show l => GuardedAlts l -> [Char]
show :: GuardedAlts l -> [Char]
$cshowList :: forall l. Show l => [GuardedAlts l] -> ShowS
showList :: [GuardedAlts l] -> ShowS
Show)
instance Annotated GuardedAlts where
amap :: forall l. (l -> l) -> GuardedAlts l -> GuardedAlts l
amap l -> l
f (GuardedAlts Rhs l
v) = Rhs l -> GuardedAlts l
forall l. Rhs l -> GuardedAlts l
GuardedAlts ((l -> l) -> Rhs l -> Rhs l
forall l. (l -> l) -> Rhs l -> Rhs l
forall (ast :: * -> *) l.
Annotated ast =>
(l -> l) -> ast l -> ast l
amap l -> l
f Rhs l
v)
ann :: forall l. GuardedAlts l -> l
ann (GuardedAlts Rhs l
v) = Rhs l -> l
forall l. Rhs l -> l
forall (ast :: * -> *) l. Annotated ast => ast l -> l
ann Rhs l
v
newtype GuardedAlt l = GuardedAlt (GuardedRhs l)
deriving ((forall a b. (a -> b) -> GuardedAlt a -> GuardedAlt b)
-> (forall a b. a -> GuardedAlt b -> GuardedAlt a)
-> Functor GuardedAlt
forall a b. a -> GuardedAlt b -> GuardedAlt a
forall a b. (a -> b) -> GuardedAlt a -> GuardedAlt b
forall (f :: * -> *).
(forall a b. (a -> b) -> f a -> f b)
-> (forall a b. a -> f b -> f a) -> Functor f
$cfmap :: forall a b. (a -> b) -> GuardedAlt a -> GuardedAlt b
fmap :: forall a b. (a -> b) -> GuardedAlt a -> GuardedAlt b
$c<$ :: forall a b. a -> GuardedAlt b -> GuardedAlt a
<$ :: forall a b. a -> GuardedAlt b -> GuardedAlt a
Functor, Int -> GuardedAlt l -> ShowS
[GuardedAlt l] -> ShowS
GuardedAlt l -> [Char]
(Int -> GuardedAlt l -> ShowS)
-> (GuardedAlt l -> [Char])
-> ([GuardedAlt l] -> ShowS)
-> Show (GuardedAlt l)
forall l. Show l => Int -> GuardedAlt l -> ShowS
forall l. Show l => [GuardedAlt l] -> ShowS
forall l. Show l => GuardedAlt l -> [Char]
forall a.
(Int -> a -> ShowS) -> (a -> [Char]) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: forall l. Show l => Int -> GuardedAlt l -> ShowS
showsPrec :: Int -> GuardedAlt l -> ShowS
$cshow :: forall l. Show l => GuardedAlt l -> [Char]
show :: GuardedAlt l -> [Char]
$cshowList :: forall l. Show l => [GuardedAlt l] -> ShowS
showList :: [GuardedAlt l] -> ShowS
Show)
instance Annotated GuardedAlt where
amap :: forall l. (l -> l) -> GuardedAlt l -> GuardedAlt l
amap l -> l
f (GuardedAlt GuardedRhs l
v) = GuardedRhs l -> GuardedAlt l
forall l. GuardedRhs l -> GuardedAlt l
GuardedAlt ((l -> l) -> GuardedRhs l -> GuardedRhs l
forall l. (l -> l) -> GuardedRhs l -> GuardedRhs l
forall (ast :: * -> *) l.
Annotated ast =>
(l -> l) -> ast l -> ast l
amap l -> l
f GuardedRhs l
v)
ann :: forall l. GuardedAlt l -> l
ann (GuardedAlt GuardedRhs l
v) = GuardedRhs l -> l
forall l. GuardedRhs l -> l
forall (ast :: * -> *) l. Annotated ast => ast l -> l
ann GuardedRhs l
v
instance ExactP GuardedAlts where
exactP :: GuardedAlts SrcSpanInfo -> EP ()
exactP (GuardedAlts (UnGuardedRhs SrcSpanInfo
_ Exp SrcSpanInfo
e)) = [Char] -> EP ()
printString [Char]
"->" EP () -> EP () -> EP ()
forall a b. EP a -> EP b -> EP b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> Exp SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Exp SrcSpanInfo
e
exactP (GuardedAlts (GuardedRhss SrcSpanInfo
_ [GuardedRhs SrcSpanInfo]
grhss)) = (GuardedRhs SrcSpanInfo -> EP ())
-> [GuardedRhs SrcSpanInfo] -> EP ()
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> m b) -> t a -> m ()
mapM_ (GuardedAlt SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC (GuardedAlt SrcSpanInfo -> EP ())
-> (GuardedRhs SrcSpanInfo -> GuardedAlt SrcSpanInfo)
-> GuardedRhs SrcSpanInfo
-> EP ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. GuardedRhs SrcSpanInfo -> GuardedAlt SrcSpanInfo
forall l. GuardedRhs l -> GuardedAlt l
GuardedAlt) [GuardedRhs SrcSpanInfo]
grhss
instance ExactP GuardedAlt where
exactP :: GuardedAlt SrcSpanInfo -> EP ()
exactP (GuardedAlt (GuardedRhs SrcSpanInfo
l [Stmt SrcSpanInfo]
ss Exp SrcSpanInfo
e)) =
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
SrcSpan
_:[SrcSpan]
pts -> do
[Char] -> EP ()
printString [Char]
"|"
[(SrcSpan, [Char])] -> [Stmt SrcSpanInfo] -> EP ()
forall (ast :: * -> *) loc.
(ExactP ast, SrcInfo loc) =>
[(loc, [Char])] -> [ast SrcSpanInfo] -> EP ()
printInterleaved' ([SrcSpan] -> [[Char]] -> [(SrcSpan, [Char])]
forall a b. [a] -> [b] -> [(a, b)]
zip ([SrcSpan] -> [SrcSpan]
forall a. HasCallStack => [a] -> [a]
init [SrcSpan]
pts) ([Char] -> [[Char]]
forall a. a -> [a]
repeat [Char]
",") [(SrcSpan, [Char])] -> [(SrcSpan, [Char])] -> [(SrcSpan, [Char])]
forall a. [a] -> [a] -> [a]
++ [([SrcSpan] -> SrcSpan
forall a. HasCallStack => [a] -> a
last [SrcSpan]
pts, [Char]
"->")]) [Stmt SrcSpanInfo]
ss
Exp SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Exp SrcSpanInfo
e
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: GuardedAlt is given wrong number of srcInfoPoints"
instance ExactP Pat where
exactP :: Pat SrcSpanInfo -> EP ()
exactP Pat SrcSpanInfo
pat = case Pat SrcSpanInfo
pat of
PVar SrcSpanInfo
l Name SrcSpanInfo
n -> Name SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC ((SrcSpanInfo -> SrcSpanInfo)
-> Name SrcSpanInfo -> Name SrcSpanInfo
forall a b. (a -> b) -> Name a -> Name b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (SrcSpanInfo -> SrcSpanInfo -> SrcSpanInfo
forall a b. a -> b -> a
const SrcSpanInfo
l) Name SrcSpanInfo
n)
PLit SrcSpanInfo
_ Sign SrcSpanInfo
sg Literal SrcSpanInfo
lit -> Sign SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Sign SrcSpanInfo
sg EP () -> EP () -> EP ()
forall a b. EP a -> EP b -> EP b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> Literal SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Literal SrcSpanInfo
lit
PNPlusK SrcSpanInfo
l Name SrcSpanInfo
n Integer
k ->
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
[SrcSpan
a,SrcSpan
b] -> do
Name SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactP Name SrcSpanInfo
n
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
a) [Char]
"+"
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
b) (Integer -> [Char]
forall a. Show a => a -> [Char]
show Integer
k)
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: Pat: PNPlusK is given wrong number of srcInfoPoints"
PInfixApp SrcSpanInfo
_ Pat SrcSpanInfo
pa QName SrcSpanInfo
qn Pat SrcSpanInfo
pb -> Pat SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactP Pat SrcSpanInfo
pa EP () -> EP () -> EP ()
forall a b. EP a -> EP b -> EP b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> QName SrcSpanInfo -> EP ()
epInfixQName QName SrcSpanInfo
qn EP () -> EP () -> EP ()
forall a b. EP a -> EP b -> EP b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> Pat SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Pat SrcSpanInfo
pb
PApp SrcSpanInfo
_ QName SrcSpanInfo
qn [Pat SrcSpanInfo]
ps -> QName SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactP QName SrcSpanInfo
qn EP () -> EP () -> EP ()
forall a b. EP a -> EP b -> EP b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> (Pat SrcSpanInfo -> EP ()) -> [Pat SrcSpanInfo] -> EP ()
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> m b) -> t a -> m ()
mapM_ Pat SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC [Pat SrcSpanInfo]
ps
PTuple SrcSpanInfo
l Boxed
bx [Pat SrcSpanInfo]
ps ->
case Boxed
bx of
Boxed
Boxed -> [SrcSpan] -> [Pat SrcSpanInfo] -> EP ()
forall (ast :: * -> *).
ExactP ast =>
[SrcSpan] -> [ast SrcSpanInfo] -> EP ()
parenList (SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l) [Pat SrcSpanInfo]
ps
Boxed
Unboxed -> [SrcSpan] -> [Pat SrcSpanInfo] -> EP ()
forall (ast :: * -> *).
ExactP ast =>
[SrcSpan] -> [ast SrcSpanInfo] -> EP ()
parenHashList (SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l) [Pat SrcSpanInfo]
ps
PUnboxedSum SrcSpanInfo
l Int
before Int
after Pat SrcSpanInfo
e ->
SrcSpanInfo -> Int -> Int -> Pat SrcSpanInfo -> EP ()
forall (e :: * -> *).
ExactP e =>
SrcSpanInfo -> Int -> Int -> e SrcSpanInfo -> EP ()
unboxedSumEP SrcSpanInfo
l Int
before Int
after Pat SrcSpanInfo
e
PList SrcSpanInfo
l [Pat SrcSpanInfo]
ps -> [SrcSpan] -> [Pat SrcSpanInfo] -> EP ()
forall (ast :: * -> *).
ExactP ast =>
[SrcSpan] -> [ast SrcSpanInfo] -> EP ()
squareList (SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l) [Pat SrcSpanInfo]
ps
PParen SrcSpanInfo
l Pat SrcSpanInfo
p -> [SrcSpan] -> [Pat SrcSpanInfo] -> EP ()
forall (ast :: * -> *).
ExactP ast =>
[SrcSpan] -> [ast SrcSpanInfo] -> EP ()
parenList (SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l) [Pat SrcSpanInfo
p]
PRec SrcSpanInfo
l QName SrcSpanInfo
qn [PatField SrcSpanInfo]
pfs -> QName SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactP QName SrcSpanInfo
qn EP () -> EP () -> EP ()
forall a b. EP a -> EP b -> EP b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> [SrcSpan] -> [PatField SrcSpanInfo] -> EP ()
forall (ast :: * -> *).
ExactP ast =>
[SrcSpan] -> [ast SrcSpanInfo] -> EP ()
curlyList (SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l) [PatField SrcSpanInfo]
pfs
PAsPat SrcSpanInfo
l Name SrcSpanInfo
n Pat SrcSpanInfo
p ->
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
[SrcSpan
a] -> do
Name SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactP Name SrcSpanInfo
n
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
a) [Char]
"@"
Pat SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Pat SrcSpanInfo
p
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: Pat: PAsPat is given wrong number of srcInfoPoints"
PWildCard SrcSpanInfo
_ -> [Char] -> EP ()
printString [Char]
"_"
PIrrPat SrcSpanInfo
_ Pat SrcSpanInfo
p -> [Char] -> EP ()
printString [Char]
"~" EP () -> EP () -> EP ()
forall a b. EP a -> EP b -> EP b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> Pat SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Pat SrcSpanInfo
p
PatTypeSig SrcSpanInfo
l Pat SrcSpanInfo
p Type SrcSpanInfo
t ->
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
[SrcSpan
a] -> do
Pat SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactP Pat SrcSpanInfo
p
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
a) [Char]
"::"
Type SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Type SrcSpanInfo
t
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: Pat: PatTypeSig is given wrong number of srcInfoPoints"
PViewPat SrcSpanInfo
l Exp SrcSpanInfo
e Pat SrcSpanInfo
p ->
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
[SrcSpan
a] -> do
Exp SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactP Exp SrcSpanInfo
e
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
a) [Char]
"->"
Pat SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Pat SrcSpanInfo
p
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: Pat: PViewPat is given wrong number of srcInfoPoints"
PRPat SrcSpanInfo
l [RPat SrcSpanInfo]
rps -> [SrcSpan] -> [RPat SrcSpanInfo] -> EP ()
forall (ast :: * -> *).
ExactP ast =>
[SrcSpan] -> [ast SrcSpanInfo] -> EP ()
squareList (SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l) [RPat SrcSpanInfo]
rps
PXTag SrcSpanInfo
l XName SrcSpanInfo
xn [PXAttr SrcSpanInfo]
attrs Maybe (Pat SrcSpanInfo)
mat [Pat SrcSpanInfo]
ps ->
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
[SrcSpan
_,SrcSpan
b,SrcSpan
c,SrcSpan
d,SrcSpan
e] -> do
[Char] -> EP ()
printString [Char]
"<"
XName SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC XName SrcSpanInfo
xn
(PXAttr SrcSpanInfo -> EP ()) -> [PXAttr SrcSpanInfo] -> EP ()
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> m b) -> t a -> m ()
mapM_ PXAttr SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC [PXAttr SrcSpanInfo]
attrs
(Pat SrcSpanInfo -> EP ()) -> Maybe (Pat SrcSpanInfo) -> EP ()
forall a. (a -> EP ()) -> Maybe a -> EP ()
maybeEP Pat SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Maybe (Pat SrcSpanInfo)
mat
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
b) [Char]
">"
(Pat SrcSpanInfo -> EP ()) -> [Pat SrcSpanInfo] -> EP ()
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> m b) -> t a -> m ()
mapM_ Pat SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC [Pat SrcSpanInfo]
ps
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
c) [Char]
"</"
(Int, Int) -> EP ()
printWhitespace (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
d)
XName SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactP XName SrcSpanInfo
xn
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
e) [Char]
">"
[SrcSpan
_,SrcSpan
b,SrcSpan
semi,SrcSpan
c,SrcSpan
d,SrcSpan
e] -> do
[Char] -> EP ()
printString [Char]
"<"
XName SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC XName SrcSpanInfo
xn
(PXAttr SrcSpanInfo -> EP ()) -> [PXAttr SrcSpanInfo] -> EP ()
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> m b) -> t a -> m ()
mapM_ PXAttr SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC [PXAttr SrcSpanInfo]
attrs
(Pat SrcSpanInfo -> EP ()) -> Maybe (Pat SrcSpanInfo) -> EP ()
forall a. (a -> EP ()) -> Maybe a -> EP ()
maybeEP Pat SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Maybe (Pat SrcSpanInfo)
mat
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
b) [Char]
">"
(Pat SrcSpanInfo -> EP ()) -> [Pat SrcSpanInfo] -> EP ()
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> m b) -> t a -> m ()
mapM_ Pat SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC [Pat SrcSpanInfo]
ps
SrcSpan -> EP ()
printSemi SrcSpan
semi
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
c) [Char]
"</"
(Int, Int) -> EP ()
printWhitespace (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
d)
XName SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactP XName SrcSpanInfo
xn
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
e) [Char]
">"
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: Pat: PXTag is given wrong number of srcInfoPoints"
PXETag SrcSpanInfo
l XName SrcSpanInfo
xn [PXAttr SrcSpanInfo]
attrs Maybe (Pat SrcSpanInfo)
mat ->
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
[SrcSpan
_,SrcSpan
b] -> do
[Char] -> EP ()
printString [Char]
"<"
XName SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC XName SrcSpanInfo
xn
(PXAttr SrcSpanInfo -> EP ()) -> [PXAttr SrcSpanInfo] -> EP ()
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> m b) -> t a -> m ()
mapM_ PXAttr SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC [PXAttr SrcSpanInfo]
attrs
(Pat SrcSpanInfo -> EP ()) -> Maybe (Pat SrcSpanInfo) -> EP ()
forall a. (a -> EP ()) -> Maybe a -> EP ()
maybeEP Pat SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Maybe (Pat SrcSpanInfo)
mat
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
b) [Char]
"/>"
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: Pat: PXETag is given wrong number of srcInfoPoints"
PXPcdata SrcSpanInfo
_ [Char]
str -> [Char] -> EP ()
printString [Char]
str
PXPatTag SrcSpanInfo
l Pat SrcSpanInfo
p ->
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
[SrcSpan
_,SrcSpan
_] -> do
[Char] -> EP ()
printString [Char]
"<%"
Pat SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Pat SrcSpanInfo
p
[Char] -> EP ()
printString [Char]
"%>"
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: Pat: PXPatTag is given wrong number of srcInfoPoints"
PXRPats SrcSpanInfo
l [RPat SrcSpanInfo]
rps -> ([Char], [Char], [Char])
-> [SrcSpan] -> [RPat SrcSpanInfo] -> EP ()
forall (ast :: * -> *).
ExactP ast =>
([Char], [Char], [Char]) -> [SrcSpan] -> [ast SrcSpanInfo] -> EP ()
bracketList ([Char]
"<[",[Char]
",",[Char]
"]>") (SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l) [RPat SrcSpanInfo]
rps
PSplice SrcSpanInfo
_ Splice SrcSpanInfo
sp -> Splice SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactP Splice SrcSpanInfo
sp
PQuasiQuote SrcSpanInfo
_ [Char]
name [Char]
qt -> [Char] -> EP ()
printString ([Char] -> EP ()) -> [Char] -> EP ()
forall a b. (a -> b) -> a -> b
$ [Char]
"[$" [Char] -> ShowS
forall a. [a] -> [a] -> [a]
++ [Char]
name [Char] -> ShowS
forall a. [a] -> [a] -> [a]
++ [Char]
"|" [Char] -> ShowS
forall a. [a] -> [a] -> [a]
++ [Char]
qt [Char] -> ShowS
forall a. [a] -> [a] -> [a]
++ [Char]
"]"
PBangPat SrcSpanInfo
_ Pat SrcSpanInfo
p -> [Char] -> EP ()
printString [Char]
"!" EP () -> EP () -> EP ()
forall a b. EP a -> EP b -> EP b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> Pat SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Pat SrcSpanInfo
p
instance ExactP PatField where
exactP :: PatField SrcSpanInfo -> EP ()
exactP PatField SrcSpanInfo
pf = case PatField SrcSpanInfo
pf of
PFieldPat SrcSpanInfo
l QName SrcSpanInfo
qn Pat SrcSpanInfo
p ->
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
[SrcSpan
a] -> do
QName SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactP QName SrcSpanInfo
qn
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
a) [Char]
"="
Pat SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Pat SrcSpanInfo
p
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: PatField: PFieldPat is given wrong number of srcInfoPoints"
PFieldPun SrcSpanInfo
_ QName SrcSpanInfo
n -> QName SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactP QName SrcSpanInfo
n
PFieldWildcard SrcSpanInfo
_ -> [Char] -> EP ()
printString [Char]
".."
instance ExactP RPat where
exactP :: RPat SrcSpanInfo -> EP ()
exactP RPat SrcSpanInfo
rpat = case RPat SrcSpanInfo
rpat of
RPOp SrcSpanInfo
_ RPat SrcSpanInfo
rp RPatOp SrcSpanInfo
op -> RPat SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactP RPat SrcSpanInfo
rp EP () -> EP () -> EP ()
forall a b. EP a -> EP b -> EP b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> RPatOp SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC RPatOp SrcSpanInfo
op
RPEither SrcSpanInfo
l RPat SrcSpanInfo
r1 RPat SrcSpanInfo
r2 ->
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
[SrcSpan
a] -> do
RPat SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactP RPat SrcSpanInfo
r1
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
a) [Char]
"|"
RPat SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC RPat SrcSpanInfo
r2
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: RPat: RPEither is given wrong number of srcInfoPoints"
RPSeq SrcSpanInfo
l [RPat SrcSpanInfo]
rps -> ([Char], [Char], [Char])
-> [SrcSpan] -> [RPat SrcSpanInfo] -> EP ()
forall (ast :: * -> *).
ExactP ast =>
([Char], [Char], [Char]) -> [SrcSpan] -> [ast SrcSpanInfo] -> EP ()
bracketList ([Char]
"(|",[Char]
",",[Char]
"|)") (SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l) [RPat SrcSpanInfo]
rps
RPGuard SrcSpanInfo
l Pat SrcSpanInfo
p [Stmt SrcSpanInfo]
stmts ->
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
SrcSpan
_:[SrcSpan]
pts -> do
[Char] -> EP ()
printString [Char]
"(|"
Pat SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Pat SrcSpanInfo
p
([Char], [Char], [Char])
-> [SrcSpan] -> [Stmt SrcSpanInfo] -> EP ()
forall (ast :: * -> *).
ExactP ast =>
([Char], [Char], [Char]) -> [SrcSpan] -> [ast SrcSpanInfo] -> EP ()
bracketList ([Char]
"|",[Char]
",",[Char]
"|)") [SrcSpan]
pts [Stmt SrcSpanInfo]
stmts
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: RPat: RPGuard is given wrong number of srcInfoPoints"
RPCAs SrcSpanInfo
l Name SrcSpanInfo
n RPat SrcSpanInfo
rp ->
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
[SrcSpan
a] -> do
Name SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactP Name SrcSpanInfo
n
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
a) [Char]
"@:"
RPat SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC RPat SrcSpanInfo
rp
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: RPat: RPCAs is given wrong number of srcInfoPoints"
RPAs SrcSpanInfo
l Name SrcSpanInfo
n RPat SrcSpanInfo
rp ->
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
[SrcSpan
a] -> do
Name SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactP Name SrcSpanInfo
n
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
a) [Char]
"@"
RPat SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC RPat SrcSpanInfo
rp
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: RPat: RPAs is given wrong number of srcInfoPoints"
RPParen SrcSpanInfo
l RPat SrcSpanInfo
rp -> [SrcSpan] -> [RPat SrcSpanInfo] -> EP ()
forall (ast :: * -> *).
ExactP ast =>
[SrcSpan] -> [ast SrcSpanInfo] -> EP ()
parenList (SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l) [RPat SrcSpanInfo
rp]
RPPat SrcSpanInfo
_ Pat SrcSpanInfo
p -> Pat SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactP Pat SrcSpanInfo
p
instance ExactP RPatOp where
exactP :: RPatOp SrcSpanInfo -> EP ()
exactP RPatOp SrcSpanInfo
rop = [Char] -> EP ()
printString ([Char] -> EP ()) -> [Char] -> EP ()
forall a b. (a -> b) -> a -> b
$ case RPatOp SrcSpanInfo
rop of
RPStar SrcSpanInfo
_ -> [Char]
"*"
RPStarG SrcSpanInfo
_ -> [Char]
"*!"
RPPlus SrcSpanInfo
_ -> [Char]
"+"
RPPlusG SrcSpanInfo
_ -> [Char]
"+!"
RPOpt SrcSpanInfo
_ -> [Char]
"?"
RPOptG SrcSpanInfo
_ -> [Char]
"?!"
instance ExactP PXAttr where
exactP :: PXAttr SrcSpanInfo -> EP ()
exactP (PXAttr SrcSpanInfo
l XName SrcSpanInfo
xn Pat SrcSpanInfo
p) =
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
[SrcSpan
a] -> do
XName SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactP XName SrcSpanInfo
xn
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
a) [Char]
"="
Pat SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Pat SrcSpanInfo
p
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: PXAttr is given wrong number of srcInfoPoints"
instance ExactP XName where
exactP :: XName SrcSpanInfo -> EP ()
exactP XName SrcSpanInfo
xn = case XName SrcSpanInfo
xn of
XName SrcSpanInfo
_ [Char]
name -> [Char] -> EP ()
printString [Char]
name
XDomName SrcSpanInfo
l [Char]
dom [Char]
name ->
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
[SrcSpan
_,SrcSpan
b,SrcSpan
c] -> do
[Char] -> EP ()
printString [Char]
dom
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
b) [Char]
":"
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
c) [Char]
name
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: XName: XDomName is given wrong number of srcInfoPoints"
instance ExactP Binds where
exactP :: Binds SrcSpanInfo -> EP ()
exactP (BDecls SrcSpanInfo
l [Decl SrcSpanInfo]
ds) = [SrcSpan] -> [Decl SrcSpanInfo] -> EP ()
forall (ast :: * -> *).
ExactP ast =>
[SrcSpan] -> [ast SrcSpanInfo] -> EP ()
layoutList (SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l) ([Decl SrcSpanInfo] -> [Decl SrcSpanInfo]
sepFunBinds [Decl SrcSpanInfo]
ds)
exactP (IPBinds SrcSpanInfo
l [IPBind SrcSpanInfo]
ips) = [SrcSpan] -> [IPBind SrcSpanInfo] -> EP ()
forall (ast :: * -> *).
ExactP ast =>
[SrcSpan] -> [ast SrcSpanInfo] -> EP ()
layoutList (SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l) [IPBind SrcSpanInfo]
ips
instance ExactP CallConv where
exactP :: CallConv SrcSpanInfo -> EP ()
exactP (StdCall SrcSpanInfo
_) = [Char] -> EP ()
printString [Char]
"stdcall"
exactP (CCall SrcSpanInfo
_) = [Char] -> EP ()
printString [Char]
"ccall"
exactP (CPlusPlus SrcSpanInfo
_) = [Char] -> EP ()
printString [Char]
"cplusplus"
exactP (DotNet SrcSpanInfo
_) = [Char] -> EP ()
printString [Char]
"dotnet"
exactP (Jvm SrcSpanInfo
_) = [Char] -> EP ()
printString [Char]
"jvm"
exactP (Js SrcSpanInfo
_) = [Char] -> EP ()
printString [Char]
"js"
exactP (JavaScript SrcSpanInfo
_) = [Char] -> EP ()
printString [Char]
"javascript"
exactP (CApi SrcSpanInfo
_) = [Char] -> EP ()
printString [Char]
"capi"
instance ExactP Safety where
exactP :: Safety SrcSpanInfo -> EP ()
exactP (PlayRisky SrcSpanInfo
_) = [Char] -> EP ()
printString [Char]
"unsafe"
exactP (PlaySafe SrcSpanInfo
_ Bool
b) = [Char] -> EP ()
printString ([Char] -> EP ()) -> [Char] -> EP ()
forall a b. (a -> b) -> a -> b
$ if Bool
b then [Char]
"threadsafe" else [Char]
"safe"
exactP (PlayInterruptible SrcSpanInfo
_) = [Char] -> EP ()
printString [Char]
"interruptible"
instance ExactP Rule where
exactP :: Rule SrcSpanInfo -> EP ()
exactP (Rule SrcSpanInfo
l [Char]
str Maybe (Activation SrcSpanInfo)
mact Maybe [RuleVar SrcSpanInfo]
mrvs Exp SrcSpanInfo
e1 Exp SrcSpanInfo
e2) =
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
SrcSpan
_:[SrcSpan]
pts -> do
[Char] -> EP ()
printString (ShowS
forall a. Show a => a -> [Char]
show [Char]
str)
(Activation SrcSpanInfo -> EP ())
-> Maybe (Activation SrcSpanInfo) -> EP ()
forall a. (a -> EP ()) -> Maybe a -> EP ()
maybeEP Activation SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactP Maybe (Activation SrcSpanInfo)
mact
pts1 <- case Maybe [RuleVar SrcSpanInfo]
mrvs of
Maybe [RuleVar SrcSpanInfo]
Nothing -> [SrcSpan] -> EP [SrcSpan]
forall a. a -> EP a
forall (m :: * -> *) a. Monad m => a -> m a
return [SrcSpan]
pts
Just [RuleVar SrcSpanInfo]
rvs ->
case [SrcSpan]
pts of
SrcSpan
a':SrcSpan
b:[SrcSpan]
pts' -> do
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
a') [Char]
"forall"
(RuleVar SrcSpanInfo -> EP ()) -> [RuleVar SrcSpanInfo] -> EP ()
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> m b) -> t a -> m ()
mapM_ RuleVar SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC [RuleVar SrcSpanInfo]
rvs
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
b) [Char]
"."
[SrcSpan] -> EP [SrcSpan]
forall a. a -> EP a
forall (m :: * -> *) a. Monad m => a -> m a
return [SrcSpan]
pts'
[SrcSpan]
_ -> [Char] -> EP [SrcSpan]
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: Rule is given too few srcInfoPoints"
case pts1 of
[SrcSpan
x] -> do
Exp SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Exp SrcSpanInfo
e1
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
x) [Char]
"="
Exp SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Exp SrcSpanInfo
e2
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: Rule is given wrong number of srcInfoPoints"
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: Rule is given too few srcInfoPoints"
instance ExactP RuleVar where
exactP :: RuleVar SrcSpanInfo -> EP ()
exactP (TypedRuleVar SrcSpanInfo
l Name SrcSpanInfo
n Type SrcSpanInfo
t) =
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
[SrcSpan
_,SrcSpan
b,SrcSpan
c] -> do
[Char] -> EP ()
printString [Char]
"("
Name SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Name SrcSpanInfo
n
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
b) [Char]
"::"
Type SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Type SrcSpanInfo
t
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
c) [Char]
")"
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: RuleVar: TypedRuleVar is given wrong number of srcInfoPoints"
exactP (RuleVar SrcSpanInfo
_ Name SrcSpanInfo
n) = Name SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactP Name SrcSpanInfo
n
instance ExactP Overlap where
exactP :: Overlap SrcSpanInfo -> EP ()
exactP (NoOverlap SrcSpanInfo
_) =
[Char] -> EP ()
printString [Char]
"{-# NO_OVERLAP #-}"
exactP (Overlap SrcSpanInfo
_) =
[Char] -> EP ()
printString [Char]
"{-# OVERLAP #-}"
exactP (Overlaps SrcSpanInfo
_) =
[Char] -> EP ()
printString [Char]
"{-# OVERLAPS #-}"
exactP (Overlapping SrcSpanInfo
_) =
[Char] -> EP ()
printString [Char]
"{-# OVERLAPPING #-}"
exactP (Overlappable SrcSpanInfo
_) =
[Char] -> EP ()
printString [Char]
"{-# OVERLAPPABLE #-}"
exactP (Incoherent SrcSpanInfo
_) =
[Char] -> EP ()
printString [Char]
"{-# INCOHERENT #-}"
instance ExactP Activation where
exactP :: Activation SrcSpanInfo -> EP ()
exactP (ActiveFrom SrcSpanInfo
l Int
i) =
SrcSpanInfo -> [[Char]] -> EP ()
printPoints SrcSpanInfo
l [[Char]
"[", Int -> [Char]
forall a. Show a => a -> [Char]
show Int
i, [Char]
"]"]
exactP (ActiveUntil SrcSpanInfo
l Int
i) =
SrcSpanInfo -> [[Char]] -> EP ()
printPoints SrcSpanInfo
l [[Char]
"[", [Char]
"~", Int -> [Char]
forall a. Show a => a -> [Char]
show Int
i, [Char]
"]"]
instance ExactP FieldDecl where
exactP :: FieldDecl SrcSpanInfo -> EP ()
exactP (FieldDecl SrcSpanInfo
l [Name SrcSpanInfo]
ns Type SrcSpanInfo
bt) = do
let pts :: [SrcSpan]
pts = SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l
[(SrcSpan, [Char])] -> [Name SrcSpanInfo] -> EP ()
forall (ast :: * -> *) loc.
(ExactP ast, SrcInfo loc) =>
[(loc, [Char])] -> [ast SrcSpanInfo] -> EP ()
printInterleaved' ([SrcSpan] -> [[Char]] -> [(SrcSpan, [Char])]
forall a b. [a] -> [b] -> [(a, b)]
zip ([SrcSpan] -> [SrcSpan]
forall a. HasCallStack => [a] -> [a]
init [SrcSpan]
pts) ([Char] -> [[Char]]
forall a. a -> [a]
repeat [Char]
",") [(SrcSpan, [Char])] -> [(SrcSpan, [Char])] -> [(SrcSpan, [Char])]
forall a. [a] -> [a] -> [a]
++ [([SrcSpan] -> SrcSpan
forall a. HasCallStack => [a] -> a
last [SrcSpan]
pts, [Char]
"::")]) [Name SrcSpanInfo]
ns
Type SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Type SrcSpanInfo
bt
instance ExactP IPBind where
exactP :: IPBind SrcSpanInfo -> EP ()
exactP (IPBind SrcSpanInfo
l IPName SrcSpanInfo
ipn Exp SrcSpanInfo
e) =
case SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
l of
[SrcSpan
a] -> do
IPName SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactP IPName SrcSpanInfo
ipn
(Int, Int) -> [Char] -> EP ()
printStringAt (SrcSpan -> (Int, Int)
forall loc. SrcInfo loc => loc -> (Int, Int)
pos SrcSpan
a) [Char]
"="
Exp SrcSpanInfo -> EP ()
forall (ast :: * -> *). ExactP ast => ast SrcSpanInfo -> EP ()
exactPC Exp SrcSpanInfo
e
[SrcSpan]
_ -> [Char] -> EP ()
forall a. [Char] -> EP a
errorEP [Char]
"ExactP: IPBind is given wrong number of srcInfoPoints"
internalError :: String -> a
internalError :: forall a. [Char] -> a
internalError [Char]
loc' = [Char] -> a
forall a. HasCallStack => [Char] -> a
error ([Char] -> a) -> [Char] -> a
forall a b. (a -> b) -> a -> b
$ [[Char]] -> [Char]
unlines
[ [Char]
"haskell-src-exts: ExactPrint: internal error (non-exhaustive pattern)"
, [Char]
"Location: " [Char] -> ShowS
forall a. [a] -> [a] -> [a]
++ [Char]
loc'
, [Char]
"This is either caused by supplying incorrect location information or by"
, [Char]
"a bug in haskell-src-exts. If this happens on an unmodified AST obtained"
, [Char]
"by the haskell-src-exts Parser it is a bug, please it report it at"
, [Char]
"https://github.com/haskell-suite/haskell-src-exts"]