重複するフィールドを持つレコードタイプを統合する

Dec 31 2020

私は次のコードを持っています:

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

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

最初のレコードに。がないため、これはコンパイルされませんfieldIDontCareAbout。ただし、に統合されforall fields. { importantField :: Int | fields }てに渡されれば、私は完全に元気ですworkWithImportantField。どうすればそれを行うことができますか?

さまざまな場所(最初のレコード、2番目のレコード、式全体)に型注釈を追加しようとしましたが、成功しませんでした。私はいつも置き換えることができidentityunsafeCoerce、私はタイプセーフな解決をしたいと思います。私はまた、手動で置き換えることによって、私は必要なフィールドを選ぶことができidentity\{ importantField } -> { importantField }、それは素敵に見えるしません。

回答

bklaric Dec 31 2020 at 05:10

Record.Extraidentitypick見つかったものに置き換えると、2番目のレコードから「破棄」されfieldIDontCareAbout、タイプが統一されます。