@@ -37,7 +37,7 @@ import Agda.Utils.Size ( Sized(size) )
3737
3838import Agda2Hs.AgdaUtils
3939import Agda2Hs.Compile.Name ( compileQName )
40- import Agda2Hs.Compile.Term ( compileTerm , usableDom , dependentDom )
40+ import Agda2Hs.Compile.Term ( compileTerm , usableDom , dependentDom , extractMaybeName )
4141import Agda2Hs.Compile.Type ( compileType , compileDom , DomOutput (.. ), compileDomType )
4242import Agda2Hs.Compile.TypeDefinition ( compileTypeDef )
4343import Agda2Hs.Compile.Types
@@ -294,7 +294,8 @@ compilePats ty ((namedArg -> ProjP po pn):ps) = do
294294
295295 compilePats (absBody b) ps
296296
297- compilePats ty ((namedArg -> pat): ps) = do
297+ compilePats ty (p: ps) = do
298+ let pat = namedArg p
298299 (a, b) <- mustBePi ty
299300 reportSDoc " agda2hs.compile.pattern" 10 $ text " Compiling pattern:" <+> prettyTCM pat
300301 let rest = compilePats (absApp b (patternToTerm pat)) ps
@@ -304,21 +305,21 @@ compilePats ty ((namedArg -> pat):ps) = do
304305 DOType -> rest
305306 DOTerm -> do
306307 checkNoAsPatterns pat
307- (:) <$> compilePat (unDom a) pat <*> rest
308+ (:) <$> compilePat (unDom a) (extractMaybeName p) pat <*> rest
308309
309310
310- compilePat :: Type -> DeBruijnPattern -> C (Hs. Pat () )
311+ compilePat :: Type -> Maybe ArgName -> DeBruijnPattern -> C (Hs. Pat () )
311312
312313-- variable pattern
313- compilePat ty p@ (VarP o x)
314+ compilePat ty _ p@ (VarP o x)
314315 | PatOWild <- patOrigin o = return $ Hs. PWildCard ()
315316 | otherwise = do
316317 n <- hsName <$> compileDBVar (dbPatVarIndex x)
317318 checkValidVarName n
318319 return $ Hs. PVar () n
319320
320321-- special constructor pattern
321- compilePat ty (ConP ch i ps) = do
322+ compilePat ty _ (ConP ch i ps) = do
322323 Just ((_, _, _), ty) <- getConType ch =<< reduce ty
323324 let c = conName ch
324325
@@ -330,13 +331,18 @@ compilePat ty (ConP ch i ps) = do
330331 return $ pApp c ps
331332
332333-- literal patterns
333- compilePat ty (LitP _ l) = compileLitPat l
334+ compilePat ty _ (LitP _ l) = compileLitPat l
334335
335- -- dot patterns are compiled to wildcard patterns
336- compilePat _ (DotP _ _) = return $ Hs. PWildCard ()
336+ -- dot patterns are compiled by prefixing with an '_' if it has been given
337+ -- an explicit name, or a wildcard otherwise
338+ compilePat _ (Just n) (DotP _ _) = do
339+ let n' = hsName $ ' _' : n
340+ checkValidVarName n'
341+ return $ Hs. PVar () n'
342+ compilePat _ Nothing (DotP _ _) = return $ Hs. PWildCard ()
337343
338344-- nothing else is supported
339- compilePat _ p = agda2hsErrorM $ " bad pattern:" <?> prettyTCM p
345+ compilePat _ _ p = agda2hsErrorM $ " bad pattern:" <?> prettyTCM p
340346
341347
342348compileErasedConP :: Type -> Strictness -> NAPs -> C (Hs. Pat () )
0 commit comments