@@ -46,7 +46,7 @@ import Agda2Hs.Compile.Var ( compileDBVar )
4646
4747import qualified Agda2Hs.Language.Haskell as Hs
4848import Agda2Hs.Language.Haskell.Utils
49- ( Strictness , hsName , pApp , patToExp , constrainType , qualifyType )
49+ ( Strictness , hsName , pApp , patToExp , constrainType , qualifyType , hsUnqualName )
5050
5151-- | Compilation rules for specific constructors in patterns.
5252isSpecialCon :: QName -> Maybe (Type -> NAPs -> C (Hs. Pat () ))
@@ -305,21 +305,21 @@ compilePats ty (p:ps) = do
305305 DOType -> rest
306306 DOTerm -> do
307307 checkNoAsPatterns pat
308- (:) <$> compilePat (unDom a) (extractMaybeName p) pat <*> rest
308+ (:) <$> compilePat (unDom a) pat <*> rest
309309
310310
311- compilePat :: Type -> Maybe ArgName -> DeBruijnPattern -> C (Hs. Pat () )
311+ compilePat :: Type -> DeBruijnPattern -> C (Hs. Pat () )
312312
313313-- variable pattern
314- compilePat ty _ p@ (VarP o x)
314+ compilePat ty p@ (VarP o x)
315315 | PatOWild <- patOrigin o = return $ Hs. PWildCard ()
316316 | otherwise = do
317317 n <- hsName <$> compileDBVar (dbPatVarIndex x)
318318 checkValidVarName n
319319 return $ Hs. PVar () n
320320
321321-- special constructor pattern
322- compilePat ty _ (ConP ch i ps) = do
322+ compilePat ty (ConP ch i ps) = do
323323 Just ((_, _, _), ty) <- getConType ch =<< reduce ty
324324 let c = conName ch
325325
@@ -331,18 +331,23 @@ compilePat ty _ (ConP ch i ps) = do
331331 return $ pApp c ps
332332
333333-- literal patterns
334- compilePat ty _ (LitP _ l) = compileLitPat l
334+ compilePat ty (LitP _ l) = compileLitPat l
335335
336336-- "Inferred" dot patterns that the programmer has explicitly named are
337337-- compiled to variable patterns using that given name, wildcards otherwise
338- compilePat _ (Just n) ( DotP _ _) = do
339- let n' = hsName n
338+ compilePat _ (DotP ( PatternInfo ( PatOVar n) _) _) = do
339+ let n' = hsName $ prettyShow n
340340 checkValidVarName n'
341341 return $ Hs. PVar () n'
342- compilePat _ Nothing (DotP _ _) = return $ Hs. PWildCard ()
342+ compilePat ty (DotP (PatternInfo PatORec (c: ps)) _) =
343+ -- User-written record pattern which has been elaborated to a dot pattern
344+ return $ pApp (hsUnqualName $ prettyShow c)
345+ (Hs. PVar () . hsName . prettyShow <$> ps)
346+ compilePat _ (DotP (PatternInfo PatODot _) _) =
347+ return $ Hs. PWildCard ()
343348
344349-- nothing else is supported
345- compilePat _ _ p = agda2hsErrorM $ " bad pattern:" <?> prettyTCM p
350+ compilePat _ p = agda2hsErrorM $ " bad pattern:" <?> prettyTCM p
346351
347352
348353compileErasedConP :: Type -> Strictness -> NAPs -> C (Hs. Pat () )
0 commit comments