2 % (c) The University of Glasgow, 1996-2003
4 Functions over HsSyn specialised to RdrName.
9 extractHsRhoRdrTyVars, extractGenericPatTyVars,
11 mkHsOpApp, mkClassDecl,
12 mkHsNegApp, mkHsIntegral, mkHsFractional, mkHsIsString,
14 mkTyData, mkPrefixCon, mkRecCon, mkInlineSpec,
15 mkRecConstrOrUpdate, -- HsExp -> [HsFieldUpdate] -> P HsExp
20 findSplice, checkDecBrGroup,
22 -- Stuff to do with Foreign declarations
24 mkImport, -- CallConv -> Safety
25 -- -> (FastString, RdrName, RdrNameHsType)
28 -- -> (FastString, RdrName, RdrNameHsType)
30 mkExtName, -- RdrName -> CLabelString
31 mkGadtDecl, -- Located RdrName -> LHsType RdrName -> ConDecl RdrName
33 -- Bunch of functions in the parser monad for
34 -- checking and constructing values
35 checkPrecP, -- Int -> P Int
36 checkContext, -- HsType -> P HsContext
37 checkPred, -- HsType -> P HsPred
38 checkTyClHdr, -- LHsContext RdrName -> LHsType RdrName -> P (LHsContext RdrName, Located RdrName, [LHsTyVarBndr RdrName], [LHsType RdrName])
39 checkTyVars, -- [LHsType RdrName] -> P ()
40 checkSynHdr, -- LHsType RdrName -> P (Located RdrName, [LHsTyVarBndr RdrName], [LHsType RdrName])
41 checkKindSigs, -- [LTyClDecl RdrName] -> P ()
42 checkInstType, -- HsType -> P HsType
43 checkDerivDecl, -- LDerivDecl RdrName -> P (LDerivDecl RdrName)
44 checkPattern, -- HsExp -> P HsPat
46 checkPatterns, -- SrcLoc -> [HsExp] -> P [HsPat]
47 checkDo, -- [Stmt] -> P [Stmt]
48 checkMDo, -- [Stmt] -> P [Stmt]
49 checkValDef, -- (SrcLoc, HsExp, HsRhs, [HsDecl]) -> P HsDecl
50 checkValSig, -- (SrcLoc, HsExp, HsRhs, [HsDecl]) -> P HsDecl
51 parseError, -- String -> Pa
54 #include "HsVersions.h"
56 import HsSyn -- Lots of it
57 import RdrName ( RdrName, isRdrTyVar, isRdrTc, mkUnqual, rdrNameOcc,
58 isRdrDataCon, isUnqual, getRdrName, isQual,
60 import BasicTypes ( maxPrecedence, Activation, InlineSpec(..), alwaysInlineSpec, neverInlineSpec )
61 import Lexer ( P, failSpanMsgP, extension, glaExtsEnabled, bangPatEnabled )
62 import TysWiredIn ( unitTyCon )
63 import ForeignCall ( CCallConv, Safety, CCallTarget(..), CExportSpec(..),
64 DNCallSpec(..), DNKind(..), CLabelString )
65 import OccName ( srcDataName, varName, isDataOcc, isTcOcc,
68 import OrdList ( OrdList, fromOL )
69 import Bag ( Bag, emptyBag, snocBag, consBag, foldrBag )
74 import List ( isSuffixOf, nubBy )
75 import Monad ( unless )
79 %************************************************************************
81 \subsection{A few functions over HsSyn at RdrName}
83 %************************************************************************
85 extractHsTyRdrNames finds the free variables of a HsType
86 It's used when making the for-alls explicit.
89 extractHsTyRdrTyVars :: LHsType RdrName -> [Located RdrName]
90 extractHsTyRdrTyVars ty = nubBy eqLocated (extract_lty ty [])
92 extractHsRhoRdrTyVars :: LHsContext RdrName -> LHsType RdrName -> [Located RdrName]
93 -- This one takes the context and tau-part of a
94 -- sigma type and returns their free type variables
95 extractHsRhoRdrTyVars ctxt ty
96 = nubBy eqLocated $ extract_lctxt ctxt (extract_lty ty [])
98 extract_lctxt ctxt acc = foldr (extract_pred . unLoc) acc (unLoc ctxt)
100 extract_pred (HsClassP cls tys) acc = foldr extract_lty acc tys
101 extract_pred (HsEqualP ty1 ty2) acc = extract_lty ty1 (extract_lty ty2 acc)
102 extract_pred (HsIParam n ty ) acc = extract_lty ty acc
104 extract_lty (L loc ty) acc
106 HsTyVar tv -> extract_tv loc tv acc
107 HsBangTy _ ty -> extract_lty ty acc
108 HsAppTy ty1 ty2 -> extract_lty ty1 (extract_lty ty2 acc)
109 HsListTy ty -> extract_lty ty acc
110 HsPArrTy ty -> extract_lty ty acc
111 HsTupleTy _ tys -> foldr extract_lty acc tys
112 HsFunTy ty1 ty2 -> extract_lty ty1 (extract_lty ty2 acc)
113 HsPredTy p -> extract_pred p acc
114 HsOpTy ty1 (L loc tv) ty2 -> extract_tv loc tv (extract_lty ty1 (extract_lty ty2 acc))
115 HsParTy ty -> extract_lty ty acc
117 HsSpliceTy _ -> acc -- Type splices mention no type variables
118 HsKindSig ty k -> extract_lty ty acc
119 HsForAllTy exp [] cx ty -> extract_lctxt cx (extract_lty ty acc)
120 HsForAllTy exp tvs cx ty -> acc ++ (filter ((`notElem` locals) . unLoc) $
121 extract_lctxt cx (extract_lty ty []))
123 locals = hsLTyVarNames tvs
124 HsDocTy ty doc -> extract_lty ty acc
126 extract_tv :: SrcSpan -> RdrName -> [Located RdrName] -> [Located RdrName]
127 extract_tv loc tv acc | isRdrTyVar tv = L loc tv : acc
130 extractGenericPatTyVars :: LHsBinds RdrName -> [Located RdrName]
131 -- Get the type variables out of the type patterns in a bunch of
132 -- possibly-generic bindings in a class declaration
133 extractGenericPatTyVars binds
134 = nubBy eqLocated (foldrBag get [] binds)
136 get (L _ (FunBind { fun_matches = MatchGroup ms _ })) acc = foldr (get_m.unLoc) acc ms
139 get_m (Match (L _ (TypePat ty) : _) _ _) acc = extract_lty ty acc
140 get_m other acc = acc
144 %************************************************************************
146 \subsection{Construction functions for Rdr stuff}
148 %************************************************************************
150 mkClassDecl builds a RdrClassDecl, filling in the names for tycon and datacon
151 by deriving them from the name of the class. We fill in the names for the
152 tycon and datacon corresponding to the class, by deriving them from the
153 name of the class itself. This saves recording the names in the interface
154 file (which would be equally good).
156 Similarly for mkConDecl, mkClassOpSig and default-method names.
158 *** See "THE NAMING STORY" in HsDecls ****
161 mkClassDecl (cxt, cname, tyvars) fds sigs mbinds ats docs
162 = ClassDecl { tcdCtxt = cxt, tcdLName = cname, tcdTyVars = tyvars,
170 mkTyData new_or_data (context, tname, tyvars, typats) ksig data_cons maybe_deriv
171 = TyData { tcdND = new_or_data, tcdCtxt = context, tcdLName = tname,
172 tcdTyVars = tyvars, tcdTyPats = typats, tcdCons = data_cons,
173 tcdKindSig = ksig, tcdDerivs = maybe_deriv }
177 mkHsNegApp :: LHsExpr RdrName -> HsExpr RdrName
178 -- RdrName If the type checker sees (negate 3#) it will barf, because negate
179 -- can't take an unboxed arg. But that is exactly what it will see when
180 -- we write "-3#". So we have to do the negation right now!
181 mkHsNegApp (L loc e) = f e
182 where f (HsLit (HsIntPrim i)) = HsLit (HsIntPrim (-i))
183 f (HsLit (HsFloatPrim i)) = HsLit (HsFloatPrim (-i))
184 f (HsLit (HsDoublePrim i)) = HsLit (HsDoublePrim (-i))
185 f expr = NegApp (L loc e) noSyntaxExpr
188 %************************************************************************
190 \subsection[cvBinds-etc]{Converting to @HsBinds@, etc.}
192 %************************************************************************
194 Function definitions are restructured here. Each is assumed to be recursive
195 initially, and non recursive definitions are discovered by the dependency
200 -- | Groups together bindings for a single function
201 cvTopDecls :: OrdList (LHsDecl RdrName) -> [LHsDecl RdrName]
202 cvTopDecls decls = go (fromOL decls)
204 go :: [LHsDecl RdrName] -> [LHsDecl RdrName]
206 go (L l (ValD b) : ds) = L l' (ValD b') : go ds'
207 where (L l' b', ds') = getMonoBind (L l b) ds
208 go (d : ds) = d : go ds
210 -- Declaration list may only contain value bindings and signatures.
211 cvBindGroup :: OrdList (LHsDecl RdrName) -> HsValBinds RdrName
213 = case cvBindsAndSigs binding of
214 (mbs, sigs, [], _) -> -- list of type decls *always* empty
217 cvBindsAndSigs :: OrdList (LHsDecl RdrName)
218 -> (Bag (LHsBind RdrName), [LSig RdrName], [LTyClDecl RdrName], [LDocDecl RdrName])
219 -- Input decls contain just value bindings and signatures
220 -- and in case of class or instance declarations also
221 -- associated type declarations. They might also contain Haddock comments.
222 cvBindsAndSigs fb = go (fromOL fb)
224 go [] = (emptyBag, [], [], [])
225 go (L l x@(SigD s) : ds) = (bs, L l s : ss, ts, docs)
226 where (bs, ss, ts, docs) = go ds
227 go (L l x@(ValD b) : ds) = (b' `consBag` bs, ss, ts, docs)
228 where (b', ds') = getMonoBind (L l b) ds
229 (bs, ss, ts, docs) = go ds'
230 go (L l (TyClD t): ds) = (bs, ss, L l t : ts, docs)
231 where (bs, ss, ts, docs) = go ds
232 go (L l (DocD d) : ds) = (bs, ss, ts, (L l d) : docs)
233 where (bs, ss, ts, docs) = go ds
235 -----------------------------------------------------------------------------
236 -- Group function bindings into equation groups
238 getMonoBind :: LHsBind RdrName -> [LHsDecl RdrName]
239 -> (LHsBind RdrName, [LHsDecl RdrName])
240 -- Suppose (b',ds') = getMonoBind b ds
241 -- ds is a list of parsed bindings
242 -- b is a MonoBinds that has just been read off the front
244 -- Then b' is the result of grouping more equations from ds that
245 -- belong with b into a single MonoBinds, and ds' is the depleted
246 -- list of parsed bindings.
248 -- All Haddock comments between equations inside the group are
251 -- No AndMonoBinds or EmptyMonoBinds here; just single equations
253 getMonoBind (L loc1 bind@(FunBind { fun_id = fun_id1@(L _ f1), fun_infix = is_infix1,
254 fun_matches = MatchGroup mtchs1 _ })) binds
256 = go is_infix1 mtchs1 loc1 binds []
258 go is_infix mtchs loc
259 (L loc2 (ValD (FunBind { fun_id = L _ f2, fun_infix = is_infix2,
260 fun_matches = MatchGroup mtchs2 _ })) : binds) _
261 | f1 == f2 = go (is_infix || is_infix2) (mtchs2 ++ mtchs)
262 (combineSrcSpans loc loc2) binds []
263 go is_infix mtchs loc (doc_decl@(L loc2 (DocD _)) : binds) doc_decls
264 = let doc_decls' = doc_decl : doc_decls
265 in go is_infix mtchs (combineSrcSpans loc loc2) binds doc_decls'
266 go is_infix mtchs loc binds doc_decls
267 = (L loc (makeFunBind fun_id1 is_infix (reverse mtchs)), (reverse doc_decls) ++ binds)
268 -- Reverse the final matches, to get it back in the right order
269 -- Do the same thing with the trailing doc comments
271 getMonoBind bind binds = (bind, binds)
273 has_args ((L _ (Match args _ _)) : _) = not (null args)
274 -- Don't group together FunBinds if they have
275 -- no arguments. This is necessary now that variable bindings
276 -- with no arguments are now treated as FunBinds rather
277 -- than pattern bindings (tests/rename/should_fail/rnfail002).
281 findSplice :: [LHsDecl a] -> (HsGroup a, Maybe (SpliceDecl a, [LHsDecl a]))
282 findSplice ds = addl emptyRdrGroup ds
284 checkDecBrGroup :: [LHsDecl a] -> P (HsGroup a)
285 -- Turn the body of a [d| ... |] into a HsGroup
286 -- There should be no splices in the "..."
287 checkDecBrGroup decls
288 = case addl emptyRdrGroup decls of
289 (group, Nothing) -> return group
290 (_, Just (SpliceDecl (L loc _), _)) ->
291 parseError loc "Declaration splices are not permitted inside declaration brackets"
292 -- Why not? See Section 7.3 of the TH paper.
294 addl :: HsGroup a -> [LHsDecl a] -> (HsGroup a, Maybe (SpliceDecl a, [LHsDecl a]))
295 -- This stuff reverses the declarations (again) but it doesn't matter
298 addl gp [] = (gp, Nothing)
299 addl gp (L l d : ds) = add gp l d ds
302 add :: HsGroup a -> SrcSpan -> HsDecl a -> [LHsDecl a]
303 -> (HsGroup a, Maybe (SpliceDecl a, [LHsDecl a]))
305 add gp l (SpliceD e) ds = (gp, Just (e, ds))
307 -- Class declarations: pull out the fixity signatures to the top
308 add gp@(HsGroup {hs_tyclds = ts, hs_fixds = fs})
311 let fsigs = [ L l f | L l (FixSig f) <- tcdSigs d ] in
312 addl (gp { hs_tyclds = L l d : ts, hs_fixds = fsigs ++ fs}) ds
314 addl (gp { hs_tyclds = L l d : ts }) ds
316 -- Signatures: fixity sigs go a different place than all others
317 add gp@(HsGroup {hs_fixds = ts}) l (SigD (FixSig f)) ds
318 = addl (gp {hs_fixds = L l f : ts}) ds
319 add gp@(HsGroup {hs_valds = ts}) l (SigD d) ds
320 = addl (gp {hs_valds = add_sig (L l d) ts}) ds
322 -- Value declarations: use add_bind
323 add gp@(HsGroup {hs_valds = ts}) l (ValD d) ds
324 = addl (gp { hs_valds = add_bind (L l d) ts }) ds
326 -- The rest are routine
327 add gp@(HsGroup {hs_instds = ts}) l (InstD d) ds
328 = addl (gp { hs_instds = L l d : ts }) ds
329 add gp@(HsGroup {hs_derivds = ts}) l (DerivD d) ds
330 = addl (gp { hs_derivds = L l d : ts }) ds
331 add gp@(HsGroup {hs_defds = ts}) l (DefD d) ds
332 = addl (gp { hs_defds = L l d : ts }) ds
333 add gp@(HsGroup {hs_fords = ts}) l (ForD d) ds
334 = addl (gp { hs_fords = L l d : ts }) ds
335 add gp@(HsGroup {hs_depds = ts}) l (DeprecD d) ds
336 = addl (gp { hs_depds = L l d : ts }) ds
337 add gp@(HsGroup {hs_ruleds = ts}) l (RuleD d) ds
338 = addl (gp { hs_ruleds = L l d : ts }) ds
341 = addl (gp { hs_docs = (L l d) : (hs_docs gp) }) ds
343 add_bind b (ValBindsIn bs sigs) = ValBindsIn (bs `snocBag` b) sigs
344 add_sig s (ValBindsIn bs sigs) = ValBindsIn bs (s:sigs)
347 %************************************************************************
349 \subsection[PrefixToHS-utils]{Utilities for conversion}
351 %************************************************************************
355 -----------------------------------------------------------------------------
358 -- When parsing data declarations, we sometimes inadvertently parse
359 -- a constructor application as a type (eg. in data T a b = C a b `D` E a b)
360 -- This function splits up the type application, adds any pending
361 -- arguments, and converts the type constructor back into a data constructor.
363 mkPrefixCon :: LHsType RdrName -> [LBangType RdrName]
364 -> P (Located RdrName, HsConDetails RdrName (LBangType RdrName))
368 split (L _ (HsAppTy t u)) ts = split t (u : ts)
369 split (L l (HsTyVar tc)) ts = do data_con <- tyConToDataCon l tc
370 return (data_con, PrefixCon ts)
371 split (L l _) _ = parseError l "parse error in data/newtype declaration"
373 mkRecCon :: Located RdrName ->
374 [([Located RdrName], LBangType RdrName, Maybe (LHsDoc RdrName))] ->
375 P (Located RdrName, HsConDetails RdrName (LBangType RdrName))
376 mkRecCon (L loc con) fields
377 = do data_con <- tyConToDataCon loc con
378 return (data_con, RecCon [ (HsRecField l t d) | (ls, t, d) <- fields, l <- ls ])
380 tyConToDataCon :: SrcSpan -> RdrName -> P (Located RdrName)
381 tyConToDataCon loc tc
382 | isTcOcc (rdrNameOcc tc)
383 = return (L loc (setRdrNameSpace tc srcDataName))
385 = parseError loc (showSDoc (text "Not a constructor:" <+> quotes (ppr tc)))
387 ----------------------------------------------------------------------------
388 -- Various Syntactic Checks
390 checkInstType :: LHsType RdrName -> P (LHsType RdrName)
391 checkInstType (L l t)
393 HsForAllTy exp tvs ctxt ty -> do
394 dict_ty <- checkDictTy ty
395 return (L l (HsForAllTy exp tvs ctxt dict_ty))
397 HsParTy ty -> checkInstType ty
399 ty -> do dict_ty <- checkDictTy (L l ty)
400 return (L l (HsForAllTy Implicit [] (noLoc []) dict_ty))
402 checkDictTy :: LHsType RdrName -> P (LHsType RdrName)
403 checkDictTy (L spn ty) = check ty []
405 check (HsTyVar t) args | not (isRdrTyVar t)
406 = return (L spn (HsPredTy (HsClassP t args)))
407 check (HsAppTy l r) args = check (unLoc l) (r:args)
408 check (HsParTy t) args = check (unLoc t) args
409 check _ _ = parseError spn "Malformed instance header"
411 -- Check whether the given list of type parameters are all type variables
412 -- (possibly with a kind signature). If the second argument is `False',
413 -- only type variables are allowed and we raise an error on encountering a
414 -- non-variable; otherwise, we allow non-variable arguments and return the
415 -- entire list of parameters.
417 checkTyVars :: [LHsType RdrName] -> P ()
418 checkTyVars tparms = mapM_ chk tparms
420 -- Check that the name space is correct!
421 chk (L l (HsKindSig (L _ (HsTyVar tv)) k))
422 | isRdrTyVar tv = return ()
423 chk (L l (HsTyVar tv))
424 | isRdrTyVar tv = return ()
426 parseError l "Type found where type variable expected"
428 -- Check whether the type arguments in a type synonym head are simply
429 -- variables. If not, we have a type equation of a type function and return
430 -- all patterns. If yes, we return 'Nothing' as the third component to
431 -- indicate a vanilla type synonym.
433 checkSynHdr :: LHsType RdrName
434 -> Bool -- is type instance?
435 -> P (Located RdrName, -- head symbol
436 [LHsTyVarBndr RdrName], -- parameters
437 [LHsType RdrName]) -- type patterns
438 checkSynHdr ty isTyInst =
439 do { (_, tc, tvs, tparms) <- checkTyClHdr (noLoc []) ty
440 ; unless isTyInst $ checkTyVars tparms
441 ; return (tc, tvs, tparms) }
444 -- Well-formedness check and decomposition of type and class heads.
446 checkTyClHdr :: LHsContext RdrName -> LHsType RdrName
447 -> P (LHsContext RdrName, -- the type context
448 Located RdrName, -- the head symbol (type or class name)
449 [LHsTyVarBndr RdrName], -- free variables of the non-context part
450 [LHsType RdrName]) -- parameters of head symbol
451 -- The header of a type or class decl should look like
452 -- (C a, D b) => T a b
456 -- With associated types, we can also have non-variable parameters; ie,
458 -- The unaltered parameter list is returned in the fourth component of the
462 -- ('()', 'T', ['a'], ['Int', '[a]'])
463 checkTyClHdr (L l cxt) ty
464 = do (tc, tvs, parms) <- gol ty []
466 return (L l cxt, tc, tvs, parms)
468 gol (L l ty) acc = go l ty acc
470 go l (HsTyVar tc) acc
471 | isRdrTc tc = do tvs <- extractTyVars acc
472 return (L l tc, tvs, acc)
473 go l (HsOpTy t1 ltc@(L _ tc) t2) acc
474 | isRdrTc tc = do tvs <- extractTyVars (t1:t2:acc)
475 return (ltc, tvs, acc)
476 go l (HsParTy ty) acc = gol ty acc
477 go l (HsAppTy t1 t2) acc = gol t1 (t2:acc)
479 parseError l "Malformed head of type or class declaration"
481 -- The predicates in a type or class decl must be class predicates or
482 -- equational constraints. They need not all have variable-only
483 -- arguments, even in Haskell 98.
484 -- E.g. class (Monad m, Monad (t m)) => MonadT t m
485 chk_pred (L l (HsClassP _ _)) = return ()
486 chk_pred (L l (HsEqualP _ _)) = return ()
488 = parseError l "Malformed context in type or class declaration"
490 -- Extract the type variables of a list of type parameters.
492 -- * Type arguments can be complex type terms (needed for associated type
495 extractTyVars :: [LHsType RdrName] -> P [LHsTyVarBndr RdrName]
496 extractTyVars tvs = collects [] tvs
498 -- Collect all variables (1st arg serves as an accumulator)
499 collect tvs (L l (HsForAllTy _ _ _ _)) =
500 parseError l "Forall type not allowed as type parameter"
501 collect tvs (L l (HsTyVar tv))
502 | isRdrTyVar tv = return $ L l (UserTyVar tv) : tvs
503 | otherwise = return tvs
504 collect tvs (L l (HsBangTy _ _ )) =
505 parseError l "Bang-style type annotations not allowed as type parameter"
506 collect tvs (L l (HsAppTy t1 t2 )) = do
507 tvs' <- collect tvs t2
509 collect tvs (L l (HsFunTy t1 t2 )) = do
510 tvs' <- collect tvs t2
512 collect tvs (L l (HsListTy t )) = collect tvs t
513 collect tvs (L l (HsPArrTy t )) = collect tvs t
514 collect tvs (L l (HsTupleTy _ ts )) = collects tvs ts
515 collect tvs (L l (HsOpTy t1 _ t2 )) = do
516 tvs' <- collect tvs t2
518 collect tvs (L l (HsParTy t )) = collect tvs t
519 collect tvs (L l (HsNumTy t )) = return tvs
520 collect tvs (L l (HsPredTy t )) =
521 parseError l "Predicate not allowed as type parameter"
522 collect tvs (L l (HsKindSig (L _ (HsTyVar tv)) k))
524 return $ L l (KindedTyVar tv k) : tvs
526 parseError l "Kind signature only allowed for type variables"
527 collect tvs (L l (HsSpliceTy t )) =
528 parseError l "Splice not allowed as type parameter"
530 -- Collect all variables of a list of types
531 collects tvs [] = return tvs
532 collects tvs (t:ts) = do
533 tvs' <- collects tvs ts
536 -- Check that associated type declarations of a class are all kind signatures.
538 checkKindSigs :: [LTyClDecl RdrName] -> P ()
539 checkKindSigs = mapM_ check
542 | isFamilyDecl tydecl
543 || isSynDecl tydecl = return ()
545 parseError l "Type declaration in a class must be a kind signature or synonym default"
547 checkContext :: LHsType RdrName -> P (LHsContext RdrName)
551 check (HsTupleTy _ ts) -- (Eq a, Ord b) shows up as a tuple type
552 = do ctx <- mapM checkPred ts
555 check (HsParTy ty) -- to be sure HsParTy doesn't get into the way
558 check (HsTyVar t) -- Empty context shows up as a unit type ()
559 | t == getRdrName unitTyCon = return (L l [])
562 = do p <- checkPred (L l t)
566 checkPred :: LHsType RdrName -> P (LHsPred RdrName)
567 -- Watch out.. in ...deriving( Show )... we use checkPred on
568 -- the list of partially applied predicates in the deriving,
569 -- so there can be zero args.
570 checkPred (L spn (HsPredTy (HsIParam n ty)))
571 = return (L spn (HsIParam n ty))
575 checkl (L l ty) args = check l ty args
577 check _loc (HsPredTy pred@(HsEqualP _ _))
579 = return $ L spn pred
580 check _loc (HsTyVar t) args | not (isRdrTyVar t)
581 = return (L spn (HsClassP t args))
582 check _loc (HsAppTy l r) args = checkl l (r:args)
583 check _loc (HsOpTy l (L loc tc) r) args = check loc (HsTyVar tc) (l:r:args)
584 check _loc (HsParTy t) args = checkl t args
585 check loc _ _ = parseError loc
586 "malformed class assertion"
588 ---------------------------------------------------------------------------
589 -- Checking stand-alone deriving declarations
591 checkDerivDecl :: LDerivDecl RdrName -> P (LDerivDecl RdrName)
592 checkDerivDecl d@(L loc _) =
593 do glaExtOn <- extension glaExtsEnabled
594 if glaExtOn then return d
595 else parseError loc "Illegal stand-alone deriving declaration (use -fglasgow-exts)"
597 ---------------------------------------------------------------------------
598 -- Checking statements in a do-expression
599 -- We parse do { e1 ; e2 ; }
600 -- as [ExprStmt e1, ExprStmt e2]
601 -- checkDo (a) checks that the last thing is an ExprStmt
602 -- (b) returns it separately
603 -- same comments apply for mdo as well
605 checkDo = checkDoMDo "a " "'do'"
606 checkMDo = checkDoMDo "an " "'mdo'"
608 checkDoMDo :: String -> String -> SrcSpan -> [LStmt RdrName] -> P ([LStmt RdrName], LHsExpr RdrName)
609 checkDoMDo pre nm loc [] = parseError loc ("Empty " ++ nm ++ " construct")
610 checkDoMDo pre nm loc ss = do
613 check [L l (ExprStmt e _ _)] = return ([], e)
614 check [L l _] = parseError l ("The last statement in " ++ pre ++ nm ++
615 " construct must be an expression")
620 -- -------------------------------------------------------------------------
621 -- Checking Patterns.
623 -- We parse patterns as expressions and check for valid patterns below,
624 -- converting the expression into a pattern at the same time.
626 checkPattern :: LHsExpr RdrName -> P (LPat RdrName)
627 checkPattern e = checkLPat e
629 checkPatterns :: [LHsExpr RdrName] -> P [LPat RdrName]
630 checkPatterns es = mapM checkPattern es
632 checkLPat :: LHsExpr RdrName -> P (LPat RdrName)
633 checkLPat e@(L l _) = checkPat l e []
635 checkPat :: SrcSpan -> LHsExpr RdrName -> [LPat RdrName] -> P (LPat RdrName)
636 checkPat loc (L l (HsVar c)) args
637 | isRdrDataCon c = return (L loc (ConPatIn (L l c) (PrefixCon args)))
638 checkPat loc e args -- OK to let this happen even if bang-patterns
639 -- are not enabled, because there is no valid
640 -- non-bang-pattern parse of (C ! e)
641 | Just (e', args') <- splitBang e
642 = do { args'' <- checkPatterns args'
643 ; checkPat loc e' (args'' ++ args) }
644 checkPat loc (L _ (HsApp f x)) args
645 = do { x <- checkLPat x; checkPat loc f (x:args) }
646 checkPat loc (L _ e) []
647 = do { p <- checkAPat loc e; return (L loc p) }
648 checkPat loc pat _some_args
651 checkAPat loc e = case e of
652 EWildPat -> return (WildPat placeHolderType)
653 HsVar x | isQual x -> parseError loc ("Qualified variable in pattern: "
655 | otherwise -> return (VarPat x)
656 HsLit l -> return (LitPat l)
658 -- Overloaded numeric patterns (e.g. f 0 x = x)
659 -- Negation is recorded separately, so that the literal is zero or +ve
660 -- NB. Negative *primitive* literals are already handled by
661 -- RdrHsSyn.mkHsNegApp
662 HsOverLit pos_lit -> return (mkNPat pos_lit Nothing)
663 NegApp (L _ (HsOverLit pos_lit)) _
664 -> return (mkNPat pos_lit (Just noSyntaxExpr))
666 SectionR (L _ (HsVar bang)) e -- (! x)
668 -> do { bang_on <- extension bangPatEnabled
669 ; if bang_on then checkLPat e >>= (return . BangPat)
670 else parseError loc "Illegal bang-pattern (use -fbang-patterns)" }
672 ELazyPat e -> checkLPat e >>= (return . LazyPat)
673 EAsPat n e -> checkLPat e >>= (return . AsPat n)
674 ExprWithTySig e t -> checkLPat e >>= \e ->
675 -- Pattern signatures are parsed as sigtypes,
676 -- but they aren't explicit forall points. Hence
677 -- we have to remove the implicit forall here.
679 L _ (HsForAllTy Implicit _ (L _ []) ty) -> ty
682 return (SigPatIn e t')
685 OpApp (L nloc (HsVar n)) (L _ (HsVar plus)) _
686 (L _ (HsOverLit lit@(HsIntegral _ _)))
688 -> return (mkNPlusKPat (L nloc n) lit)
690 OpApp l op fix r -> checkLPat l >>= \l ->
691 checkLPat r >>= \r ->
693 L cl (HsVar c) | isDataOcc (rdrNameOcc c)
694 -> return (ConPatIn (L cl c) (InfixCon l r))
697 HsPar e -> checkLPat e >>= (return . ParPat)
698 ExplicitList _ es -> mapM (\e -> checkLPat e) es >>= \ps ->
699 return (ListPat ps placeHolderType)
700 ExplicitPArr _ es -> mapM (\e -> checkLPat e) es >>= \ps ->
701 return (PArrPat ps placeHolderType)
703 ExplicitTuple es b -> mapM (\e -> checkLPat e) es >>= \ps ->
704 return (TuplePat ps b placeHolderType)
706 RecordCon c _ (HsRecordBinds fs) -> mapM checkPatField fs >>= \fs ->
707 return (ConPatIn c (RecCon (map (uncurry mkRecField) fs)))
709 HsType ty -> return (TypePat ty)
712 plus_RDR, bang_RDR :: RdrName
713 plus_RDR = mkUnqual varName FSLIT("+") -- Hack
714 bang_RDR = mkUnqual varName FSLIT("!") -- Hack
716 checkPatField :: (Located RdrName, LHsExpr RdrName) -> P (Located RdrName, LPat RdrName)
717 checkPatField (n,e) = do
721 patFail loc = parseError loc "Parse error in pattern"
724 ---------------------------------------------------------------------------
725 -- Check Equation Syntax
727 checkValDef :: LHsExpr RdrName
728 -> Maybe (LHsType RdrName)
729 -> Located (GRHSs RdrName)
730 -> P (HsBind RdrName)
732 checkValDef lhs (Just sig) grhss
733 -- x :: ty = rhs parses as a *pattern* binding
734 = checkPatBind (L (combineLocs lhs sig) (ExprWithTySig lhs sig)) grhss
736 checkValDef lhs opt_sig grhss
737 = do { mb_fun <- isFunLhs lhs
739 Just (fun, is_infix, pats) -> checkFunBind (getLoc lhs)
740 fun is_infix pats opt_sig grhss
741 Nothing -> checkPatBind lhs grhss }
743 checkFunBind lhs_loc fun is_infix pats opt_sig (L rhs_span grhss)
745 = parseError (getLoc fun) ("Qualified name in function definition: " ++
746 showRdrName (unLoc fun))
748 = do ps <- checkPatterns pats
749 let match_span = combineSrcSpans lhs_loc rhs_span
750 return (makeFunBind fun is_infix [L match_span (Match ps opt_sig grhss)])
751 -- The span of the match covers the entire equation.
752 -- That isn't quite right, but it'll do for now.
754 makeFunBind :: Located id -> Bool -> [LMatch id] -> HsBind id
755 -- Like HsUtils.mkFunBind, but we need to be able to set the fixity too
756 makeFunBind fn is_infix ms
757 = FunBind { fun_id = fn, fun_infix = is_infix, fun_matches = mkMatchGroup ms,
758 fun_co_fn = idHsWrapper, bind_fvs = placeHolderNames, fun_tick = Nothing }
760 checkPatBind lhs (L _ grhss)
761 = do { lhs <- checkPattern lhs
762 ; return (PatBind lhs grhss placeHolderType placeHolderNames) }
768 checkValSig (L l (HsVar v)) ty
769 | isUnqual v && not (isDataOcc (rdrNameOcc v))
770 = return (TypeSig (L l v) ty)
771 checkValSig (L l other) ty
772 = parseError l "Invalid type signature"
774 mkGadtDecl :: Located RdrName
775 -> LHsType RdrName -- assuming HsType
777 mkGadtDecl name (L _ (HsForAllTy _ qvars cxt ty)) = mk_gadt_con name qvars cxt ty
778 mkGadtDecl name ty = mk_gadt_con name [] (noLoc []) ty
780 mk_gadt_con name qvars cxt ty
781 = ConDecl { con_name = name
782 , con_explicit = Implicit
785 , con_details = PrefixCon []
786 , con_res = ResTyGADT ty
787 , con_doc = Nothing }
788 -- NB: we put the whole constr type into the ResTyGADT for now;
789 -- the renamer will unravel it once it has sorted out
792 -- A variable binding is parsed as a FunBind.
795 -- The parser left-associates, so there should
796 -- not be any OpApps inside the e's
797 splitBang :: LHsExpr RdrName -> Maybe (LHsExpr RdrName, [LHsExpr RdrName])
798 -- Splits (f ! g a b) into (f, [(! g), a, b])
799 splitBang (L loc (OpApp l_arg bang@(L loc' (HsVar op)) _ r_arg))
800 | op == bang_RDR = Just (l_arg, L loc (SectionR bang arg1) : argns)
802 (arg1,argns) = split_bang r_arg []
803 split_bang (L _ (HsApp f e)) es = split_bang f (e:es)
804 split_bang e es = (e,es)
805 splitBang other = Nothing
807 isFunLhs :: LHsExpr RdrName
808 -> P (Maybe (Located RdrName, Bool, [LHsExpr RdrName]))
809 -- Just (fun, is_infix, arg_pats) if e is a function LHS
811 -- The whole LHS is parsed as a single expression.
812 -- Any infix operators on the LHS will parse left-associatively
814 -- will parse (rather strangely) as
816 -- It's up to isFunLhs to sort out the mess
822 go (L loc (HsVar f)) es
823 | not (isRdrDataCon f) = return (Just (L loc f, False, es))
824 go (L _ (HsApp f e)) es = go f (e:es)
825 go (L _ (HsPar e)) es@(_:_) = go e es
827 -- For infix function defns, there should be only one infix *function*
828 -- (though there may be infix *datacons* involved too). So we don't
829 -- need fixity info to figure out which function is being defined.
830 -- a `K1` b `op` c `K2` d
832 -- (a `K1` b) `op` (c `K2` d)
833 -- The renamer checks later that the precedences would yield such a parse.
835 -- There is a complication to deal with bang patterns.
837 -- ToDo: what about this?
838 -- x + 1 `op` y = ...
840 go e@(L loc (OpApp l (L loc' (HsVar op)) fix r)) es
841 | Just (e',es') <- splitBang e
842 = do { bang_on <- extension bangPatEnabled
843 ; if bang_on then go e' (es' ++ es)
844 else return (Just (L loc' op, True, (l:r:es))) }
845 -- No bangs; behave just like the next case
846 | not (isRdrDataCon op) -- We have found the function!
847 = return (Just (L loc' op, True, (l:r:es)))
848 | otherwise -- Infix data con; keep going
849 = do { mb_l <- go l es
851 Just (op', True, j : k : es')
852 -> return (Just (op', True, j : op_app : es'))
854 op_app = L loc (OpApp k (L loc' (HsVar op)) fix r)
855 _ -> return Nothing }
856 go _ _ = return Nothing
858 ---------------------------------------------------------------------------
859 -- Miscellaneous utilities
861 checkPrecP :: Located Int -> P Int
863 | 0 <= i && i <= maxPrecedence = return i
864 | otherwise = parseError l "Precedence out of range"
869 -> HsRecordBinds RdrName
870 -> P (HsExpr RdrName)
872 mkRecConstrOrUpdate (L l (HsVar c)) loc fs | isRdrDataCon c
873 = return (RecordCon (L l c) noPostTcExpr fs)
874 mkRecConstrOrUpdate exp loc fs@(HsRecordBinds (_:_))
875 = return (RecordUpd exp fs [] [] [])
876 mkRecConstrOrUpdate _ loc (HsRecordBinds [])
877 = parseError loc "Empty record update"
879 mkInlineSpec :: Maybe Activation -> Bool -> InlineSpec
880 -- The Maybe is becuase the user can omit the activation spec (and usually does)
881 mkInlineSpec Nothing True = alwaysInlineSpec -- INLINE
882 mkInlineSpec Nothing False = neverInlineSpec -- NOINLINE
883 mkInlineSpec (Just act) inl = Inline act inl
886 -----------------------------------------------------------------------------
887 -- utilities for foreign declarations
889 -- supported calling conventions
891 data CallConv = CCall CCallConv -- ccall or stdcall
894 -- construct a foreign import declaration
898 -> (Located FastString, Located RdrName, LHsType RdrName)
899 -> P (HsDecl RdrName)
900 mkImport (CCall cconv) safety (entity, v, ty) = do
901 importSpec <- parseCImport entity cconv safety v
902 return (ForD (ForeignImport v ty importSpec))
903 mkImport (DNCall ) _ (entity, v, ty) = do
904 spec <- parseDImport entity
905 return $ ForD (ForeignImport v ty (DNImport spec))
907 -- parse the entity string of a foreign import declaration for the `ccall' or
908 -- `stdcall' calling convention'
910 parseCImport :: Located FastString
915 parseCImport (L loc entity) cconv safety v
916 -- FIXME: we should allow white space around `dynamic' and `wrapper' -=chak
917 | entity == FSLIT ("dynamic") =
918 return $ CImport cconv safety nilFS nilFS (CFunction DynamicTarget)
919 | entity == FSLIT ("wrapper") =
920 return $ CImport cconv safety nilFS nilFS CWrapper
921 | otherwise = parse0 (unpackFS entity)
923 -- using the static keyword?
924 parse0 (' ': rest) = parse0 rest
925 parse0 ('s':'t':'a':'t':'i':'c':rest) = parse1 rest
926 parse0 rest = parse1 rest
927 -- check for header file name
928 parse1 "" = parse4 "" nilFS False nilFS
929 parse1 (' ':rest) = parse1 rest
930 parse1 str@('&':_ ) = parse2 str nilFS
931 parse1 str@('[':_ ) = parse3 str nilFS False
933 | ".h" `isSuffixOf` first = parse2 rest (mkFastString first)
934 | otherwise = parse4 str nilFS False nilFS
936 (first, rest) = break (\c -> c == ' ' || c == '&' || c == '[') str
937 -- check for address operator (indicating a label import)
938 parse2 "" header = parse4 "" header False nilFS
939 parse2 (' ':rest) header = parse2 rest header
940 parse2 ('&':rest) header = parse3 rest header True
941 parse2 str@('[':_ ) header = parse3 str header False
942 parse2 str header = parse4 str header False nilFS
943 -- check for library object name
944 parse3 (' ':rest) header isLbl = parse3 rest header isLbl
945 parse3 ('[':rest) header isLbl =
946 case break (== ']') rest of
947 (lib, ']':rest) -> parse4 rest header isLbl (mkFastString lib)
948 _ -> parseError loc "Missing ']' in entity"
949 parse3 str header isLbl = parse4 str header isLbl nilFS
950 -- check for name of C function
951 parse4 "" header isLbl lib = build (mkExtName (unLoc v)) header isLbl lib
952 parse4 (' ':rest) header isLbl lib = parse4 rest header isLbl lib
953 parse4 str header isLbl lib
954 | all (== ' ') rest = build (mkFastString first) header isLbl lib
955 | otherwise = parseError loc "Malformed entity string"
957 (first, rest) = break (== ' ') str
959 build cid header False lib = return $
960 CImport cconv safety header lib (CFunction (StaticTarget cid))
961 build cid header True lib = return $
962 CImport cconv safety header lib (CLabel cid )
965 -- Unravel a dotnet spec string.
967 parseDImport :: Located FastString -> P DNCallSpec
968 parseDImport (L loc entity) = parse0 comps
970 comps = words (unpackFS entity)
974 | x == "static" = parse1 True xs
975 | otherwise = parse1 False (x:xs)
978 parse1 isStatic (x:xs)
979 | x == "method" = parse2 isStatic DNMethod xs
980 | x == "field" = parse2 isStatic DNField xs
981 | x == "ctor" = parse2 isStatic DNConstructor xs
982 parse1 isStatic xs = parse2 isStatic DNMethod xs
985 parse2 isStatic kind (('[':x):xs) =
988 vs | last vs == ']' -> parse3 isStatic kind (init vs) xs
989 parse2 isStatic kind xs = parse3 isStatic kind "" xs
991 parse3 isStatic kind assem [x] =
992 return (DNCallSpec isStatic kind assem x
993 -- these will be filled in once known.
994 (error "FFI-dotnet-args")
995 (error "FFI-dotnet-result"))
996 parse3 _ _ _ _ = d'oh
998 d'oh = parseError loc "Malformed entity string"
1000 -- construct a foreign export declaration
1002 mkExport :: CallConv
1003 -> (Located FastString, Located RdrName, LHsType RdrName)
1004 -> P (HsDecl RdrName)
1005 mkExport (CCall cconv) (L loc entity, v, ty) = return $
1006 ForD (ForeignExport v ty (CExport (CExportStatic entity' cconv)))
1008 entity' | nullFS entity = mkExtName (unLoc v)
1009 | otherwise = entity
1010 mkExport DNCall (L loc entity, v, ty) =
1011 parseError (getLoc v){-TODO: not quite right-}
1012 "Foreign export is not yet supported for .NET"
1014 -- Supplying the ext_name in a foreign decl is optional; if it
1015 -- isn't there, the Haskell name is assumed. Note that no transformation
1016 -- of the Haskell name is then performed, so if you foreign export (++),
1017 -- it's external name will be "++". Too bad; it's important because we don't
1018 -- want z-encoding (e.g. names with z's in them shouldn't be doubled)
1020 mkExtName :: RdrName -> CLabelString
1021 mkExtName rdrNm = mkFastString (occNameString (rdrNameOcc rdrNm))
1025 -----------------------------------------------------------------------------
1029 showRdrName :: RdrName -> String
1030 showRdrName r = showSDoc (ppr r)
1032 parseError :: SrcSpan -> String -> P a
1033 parseError span s = failSpanMsgP span s