I have the following code:
workWithImportantField :: forall fields. { importantField :: Int | fields } -> Input
workWithImportantField = ...
workWithImportantField $
maybe { importantField: 1 } identity (Just { importantField: 1, fieldIDontCareAbout: "whatever" })
This doesn't compile because the first record doesn't have the fieldIDontCareAbout
. However, I'm perfectly fine if it unifies into forall fields. { importantField :: Int | fields }
so it gets passed into workWithImportantField
. How would I go about doing that?
I've tried adding type annotations to various places (first record, second record, the whole expression) without success. I can always replace identity
with unsafeCoerce
, but I would like a type-safe solution. I can also manually pick out the fields I need by replacing identity
with { importantField } -> { importantField }
, but that doesn't look nice.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…