@@ -447,18 +447,10 @@ promoteMethod inst_sigs_map m_subst orig_sigs_map (meth_name, meth_rhs) = do
447
447
-- strictly necessary, as kind inference can figure them out just as well.
448
448
family_args = map DVarT meth_arg_tvs
449
449
helperName <- newUniqueName helperNameBase
450
- let proHelperName = promoteValNameLhs helperName
451
- ((_, _, _, eqns), _defuns, ann_rhs)
450
+ (pro_dec, defun_decs, ann_rhs)
452
451
<- promoteLetDecRHS (Just (meth_arg_kis, meth_res_ki)) OMap. empty OMap. empty
453
452
noPrefix helperName meth_rhs
454
- let tvbs = zipWith DKindedTV meth_arg_tvs meth_arg_kis
455
- emitDecs [DClosedTypeFamilyD (DTypeFamilyHead
456
- proHelperName
457
- tvbs
458
- (DKindSig meth_res_ki)
459
- Nothing )
460
- eqns]
461
- emitDecsM (defunctionalize proHelperName Nothing tvbs (Just meth_res_ki))
453
+ emitDecs (pro_dec: defun_decs)
462
454
return ( DTySynInstD
463
455
(DTySynEqn Nothing
464
456
(foldType (DConT proName) family_args)
@@ -544,12 +536,12 @@ promoteLetDecEnv prefixes (LetDecEnv { lde_defns = value_env
544
536
545
537
-- promote all the declarations, producing annotated declarations
546
538
let (names, rhss) = unzip $ OMap. assocs value_env
547
- (payloads , defun_decss, ann_rhss)
539
+ (pro_decs , defun_decss, ann_rhss)
548
540
<- fmap unzip3 $ zipWithM (promoteLetDecRHS Nothing type_env fix_env prefixes) names rhss
549
541
550
542
emitDecs $ concat defun_decss
551
543
bound_kvs <- allBoundKindVars
552
- let decs = map payload_to_dec payloads ++ infix_decls
544
+ let decs = pro_decs ++ infix_decls
553
545
554
546
-- build the ALetDecEnv
555
547
let let_dec_env' = LetDecEnv { lde_defns = OMap. fromList $ zip names ann_rhss
@@ -559,12 +551,6 @@ promoteLetDecEnv prefixes (LetDecEnv { lde_defns = value_env
559
551
, lde_bound_kvs = OMap. fromList $ map (, bound_kvs) names }
560
552
561
553
return (decs, let_dec_env')
562
- where
563
- payload_to_dec (name, tvbs, m_ki, eqns) = DClosedTypeFamilyD
564
- (DTypeFamilyHead name tvbs sig Nothing )
565
- eqns
566
- where
567
- sig = maybe DNoSig DKindSig m_ki
568
554
569
555
promoteInfixDecl :: Name -> Fixity -> Maybe DDec
570
556
promoteInfixDecl name fixity
@@ -590,7 +576,7 @@ promoteLetDecRHS :: Maybe ([DKind], DKind) -- the promoted type of the RHS (if
590
576
-> (String , String ) -- let-binding prefixes
591
577
-> Name -- name of the thing being promoted
592
578
-> ULetDecRHS -- body of the thing
593
- -> PrM ( ( Name , [ DTyVarBndr ], Maybe DKind , [ DTySynEqn ]) -- "type family"
579
+ -> PrM ( DDec -- "type family"
594
580
, [DDec ] -- defunctionalization
595
581
, ALetDecRHS ) -- annotated RHS
596
582
promoteLetDecRHS m_rhs_ki type_env fix_env prefixes name (UValue exp ) = do
@@ -612,8 +598,9 @@ promoteLetDecRHS m_rhs_ki type_env fix_env prefixes name (UValue exp) = do
612
598
m_fixity = OMap. lookup name fix_env
613
599
tvbs = map DPlainTV all_locals
614
600
defuns <- defunctionalize proName m_fixity tvbs res_kind
615
- return ( ( proName, tvbs, res_kind
616
- , [DTySynEqn Nothing (foldType (DConT proName) $ map DVarT all_locals) exp'] )
601
+ return ( DClosedTypeFamilyD
602
+ (DTypeFamilyHead proName tvbs (maybeKindToResultSig res_kind) Nothing )
603
+ [DTySynEqn Nothing (foldType (DConT proName) $ map DVarT all_locals) exp']
617
604
, defuns
618
605
, AValue (foldType (DConT proName) (map DVarT all_locals))
619
606
num_arrows ann_exp )
@@ -652,7 +639,9 @@ promoteLetDecRHS m_rhs_ki type_env fix_env prefixes name (UFunction clauses) = d
652
639
(eqns, ann_clauses) <- forallBind lde_kvs_to_bind $
653
640
mapAndUnzipM (promoteClause proName) expClauses
654
641
prom_fun <- lookupVarE name
655
- return ( (proName, all_args, m_resK, eqns)
642
+ return ( DClosedTypeFamilyD
643
+ (DTypeFamilyHead proName all_args (maybeKindToResultSig m_resK) Nothing )
644
+ eqns
656
645
, defun_decs
657
646
, AFunction prom_fun ty_num_args ann_clauses )
658
647
0 commit comments