summaryrefslogtreecommitdiff
path: root/src/errors/MustMergeARecord.txt
blob: 79094bd5294780f314561f2b4a93374b9b959bb5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
Explanation: You can ❰merge❱ the alternatives of a union using a record with one
handler per alternative, like this:


    ┌─────────────────────────────────────────────────────────────────────┐
    │     let union    = < Left = +2 | Right : Bool >                     │
    │ in  let handlers = { Left = Natural/even, Right = λ(x : Bool) → x } │
    │ in  merge handlers union : Bool                                     │
    └─────────────────────────────────────────────────────────────────────┘


... but the first argument to ❰merge❱ must be a record and not some other type.

For example, the following expression is $_NOT valid:


    ┌─────────────────────────────────────────┐
    │ let handler = λ(x : Bool) → x           │
    │ in  merge handler < Foo = True > : True │
    └─────────────────────────────────────────┘
                ⇧
                Invalid: ❰handler❱ isn't a record


You provided the following handler:

↳ $txt0

... which is not a record, but is actually a value of type:

↳ $txt1

Some common reasons why you might get this error:

● You accidentally provide an empty record type instead of an empty record when
  you ❰merge❱ an empty union:


    ┌──────────────────────────────────────────┐
    │ λ(x : <>) → λ(a : Type) → merge {} x : a │
    └──────────────────────────────────────────┘
                                      ⇧
                                      This should be ❰{=}❱ instead