Kayıt türlerini çakışan alanlarla birleştirin

Dec 31 2020

Takip koduna sahibim:

workWithImportantField :: forall fields. { importantField :: Int | fields } -> Input
workWithImportantField = ...

workWithImportantField $ 
maybe { importantField: 1 } identity (Just { importantField: 1, fieldIDontCareAbout: "whatever" })

Bu derlenmez çünkü ilk kayıtta fieldIDontCareAbout. Bununla birlikte, birleşip içine forall fields. { importantField :: Int | fields }geçmesi için gayet iyiyim workWithImportantField. Bunu nasıl yapacağım?

Başarı olmadan çeşitli yerlere (ilk kayıt, ikinci kayıt, tüm ifade) tür ek açıklamaları eklemeyi denedim. Hep yerini alabilir identityile unsafeCoerce, ama tip-güvenli bir çözüm istiyorum. İhtiyacım olan alanları identityile değiştirerek manuel olarak da seçebilirim \{ importantField } -> { importantField }, ancak bu hiç hoş görünmüyor.

Yanıtlar

bklaric Dec 31 2020 at 05:10

Record.Extra'da bulunan identityile değiştirmek , türlerin birleştirilmesi için ikinci kayıttan " atılır " .pickfieldIDontCareAbout