@@ -292,41 +292,30 @@ type CtorDups = Dups.Dict (Map.Map ModuleName.Canonical Env.Ctor)
293canonicalizeAlias :: Env.Env -> Valid.Alias -> Result i w ( (N.Name, Can.Alias), CtorDups )
293canonicalizeAlias :: Env.Env -> Valid.Alias -> Result i w ( (N.Name, Can.Alias), CtorDups )
294canonicalizeAlias env@(Env.Env home _ _ _ _ _ _ _) (Valid.Alias _ (A.At region name) args tipe) =
294canonicalizeAlias env@(Env.Env home _ _ _ _ _ _ _) (Valid.Alias _ (A.At region name) args tipe) =
295+ do let vars = map A.toValue args
296+ ctipe <- Type.canonicalize env tipe
298+ ( (name, Can.Alias vars ctipe)
295− case tipe of
300+ case ctipe of
296− A.At _ (Src.TRecord fields Nothing) ->
297− do cfields <- canonicalizeFields env fields
298− fieldDict <- Dups.checkFields cfields
301− addArg (_, Can.FieldType _ t1) t2 = Can.TLambda t1 t2
302− recordType = Can.TRecord fieldDict Nothing
301+ Can.TRecord fields Nothing ->
303− vars = map A.toValue args
304− ctor = Env.RecordCtor home vars (foldr addArg recordType cfields)
307− ( (name, Can.Alias vars recordType)
308− , Dups.one name region (Map.singleton home ctor)
302+ Dups.one name region (Map.singleton home (toRecordCtor home name vars fields))
312− do ctipe <- Type.canonicalize env tipe
314− ( (name, Can.Alias (map A.toValue args) ctipe)
315− , Dups.none
305+ Dups.none
319−canonicalizeFields :: Env.Env -> [(A.Located N.Name, Src.Type)] -> Result i w [(A.Located N.Name, Can.FieldType)]
308+toRecordCtor :: ModuleName.Canonical -> N.Name -> [N.Name] -> Map.Map N.Name Can.FieldType -> Env.Ctor
320−canonicalizeFields env fields =
309+toRecordCtor home name vars fields =
322− len =
311+ avars = map (\var -> (var, Can.TVar var)) vars
323− fromIntegral (length fields)
312+ alias =
325− canonicalizeField index (name, srcType) =
314+ (\(_,t1) t2 -> Can.TLambda t1 t2)
326− do tipe <- Type.canonicalize env srcType
315+ (Can.TAlias home name avars (Can.Filled (Can.TRecord fields Nothing)))
327− return (name, Can.FieldType index tipe)
316+ (Can.fieldsToList fields)
329− sequenceA (zipWith canonicalizeField [0..len] fields)
318+ Env.RecordCtor home vars alias