finos / morphir-elm / Morphir.SDK.Key

Helpers to work with composite keys.

Motivation

It is difficult to work with composite keys in Elm due to various limitations:

This library resolves those issues by introducing type aliases for keys of various element sizes. All these types are generic to let developers to create their custom types to be comparable and they all have utility functions to compose them. Here's an example:

type alias MyEntity =
    { foo : String
    , bar : Int
    , baz : Float
    }

-- myKey : Key3 Int String Float
myKey =
    key3 .bar .foo .baz

Note: This file was generated using Elm code that is included as a comment at the end of the source code for this module. You can use that code to extend this module without too much manual work.

Composing Keys

noKey : a -> Key0

Creates a key with zero elements.

key0 : a -> Key0

Creates a key with zero elements.

key2 : (a -> b1) -> (a -> b2) -> a -> Key2 b1 b2

Create a composite key with 2 elements.

key3 : (a -> b1) -> (a -> b2) -> (a -> b3) -> a -> Key3 b1 b2 b3

Create a composite key with 3 elements.

key4 : (a -> b1) -> (a -> b2) -> (a -> b3) -> (a -> b4) -> a -> Key4 b1 b2 b3 b4

Create a composite key with 4 elements.

key5 : (a -> b1) -> (a -> b2) -> (a -> b3) -> (a -> b4) -> (a -> b5) -> a -> Key5 b1 b2 b3 b4 b5

Create a composite key with 5 elements.

key6 : (a -> b1) -> (a -> b2) -> (a -> b3) -> (a -> b4) -> (a -> b5) -> (a -> b6) -> a -> Key6 b1 b2 b3 b4 b5 b6

Create a composite key with 6 elements.

key7 : (a -> b1) -> (a -> b2) -> (a -> b3) -> (a -> b4) -> (a -> b5) -> (a -> b6) -> (a -> b7) -> a -> Key7 b1 b2 b3 b4 b5 b6 b7

Create a composite key with 7 elements.

key8 : (a -> b1) -> (a -> b2) -> (a -> b3) -> (a -> b4) -> (a -> b5) -> (a -> b6) -> (a -> b7) -> (a -> b8) -> a -> Key8 b1 b2 b3 b4 b5 b6 b7 b8

Create a composite key with 8 elements.

key9 : (a -> b1) -> (a -> b2) -> (a -> b3) -> (a -> b4) -> (a -> b5) -> (a -> b6) -> (a -> b7) -> (a -> b8) -> (a -> b9) -> a -> Key9 b1 b2 b3 b4 b5 b6 b7 b8 b9

Create a composite key with 9 elements.

key10 : (a -> b1) -> (a -> b2) -> (a -> b3) -> (a -> b4) -> (a -> b5) -> (a -> b6) -> (a -> b7) -> (a -> b8) -> (a -> b9) -> (a -> b10) -> a -> Key10 b1 b2 b3 b4 b5 b6 b7 b8 b9 b10

Create a composite key with 10 elements.

key11 : (a -> b1) -> (a -> b2) -> (a -> b3) -> (a -> b4) -> (a -> b5) -> (a -> b6) -> (a -> b7) -> (a -> b8) -> (a -> b9) -> (a -> b10) -> (a -> b11) -> a -> Key11 b1 b2 b3 b4 b5 b6 b7 b8 b9 b10 b11

Create a composite key with 11 elements.

key12 : (a -> b1) -> (a -> b2) -> (a -> b3) -> (a -> b4) -> (a -> b5) -> (a -> b6) -> (a -> b7) -> (a -> b8) -> (a -> b9) -> (a -> b10) -> (a -> b11) -> (a -> b12) -> a -> Key12 b1 b2 b3 b4 b5 b6 b7 b8 b9 b10 b11 b12

Create a composite key with 12 elements.

key13 : (a -> b1) -> (a -> b2) -> (a -> b3) -> (a -> b4) -> (a -> b5) -> (a -> b6) -> (a -> b7) -> (a -> b8) -> (a -> b9) -> (a -> b10) -> (a -> b11) -> (a -> b12) -> (a -> b13) -> a -> Key13 b1 b2 b3 b4 b5 b6 b7 b8 b9 b10 b11 b12 b13

Create a composite key with 13 elements.

key14 : (a -> b1) -> (a -> b2) -> (a -> b3) -> (a -> b4) -> (a -> b5) -> (a -> b6) -> (a -> b7) -> (a -> b8) -> (a -> b9) -> (a -> b10) -> (a -> b11) -> (a -> b12) -> (a -> b13) -> (a -> b14) -> a -> Key14 b1 b2 b3 b4 b5 b6 b7 b8 b9 b10 b11 b12 b13 b14

Create a composite key with 14 elements.

key15 : (a -> b1) -> (a -> b2) -> (a -> b3) -> (a -> b4) -> (a -> b5) -> (a -> b6) -> (a -> b7) -> (a -> b8) -> (a -> b9) -> (a -> b10) -> (a -> b11) -> (a -> b12) -> (a -> b13) -> (a -> b14) -> (a -> b15) -> a -> Key15 b1 b2 b3 b4 b5 b6 b7 b8 b9 b10 b11 b12 b13 b14 b15

Create a composite key with 15 elements.

key16 : (a -> b1) -> (a -> b2) -> (a -> b3) -> (a -> b4) -> (a -> b5) -> (a -> b6) -> (a -> b7) -> (a -> b8) -> (a -> b9) -> (a -> b10) -> (a -> b11) -> (a -> b12) -> (a -> b13) -> (a -> b14) -> (a -> b15) -> (a -> b16) -> a -> Key16 b1 b2 b3 b4 b5 b6 b7 b8 b9 b10 b11 b12 b13 b14 b15 b16

Create a composite key with 16 elements.

Key Types


type alias Key0 =
Basics.Int

Type that represents a zero element key. The ideal representation would be () but Unit is not comparable in Elm. So we use Int to retain comparable semantics but only 0 should be used as a value. key0 and noKey can be used to create a Key0 value.


type alias Key2 k1 k2 =
( k1, k2 )

Type that represents a composite key with 2 elements.


type alias Key3 k1 k2 k3 =
( k1, k2, k3 )

Type that represents a composite key with 3 elements.


type alias Key4 k1 k2 k3 k4 =
( k1, k2, ( k3, k4 ) )

Type that represents a composite key with 4 elements.


type alias Key5 k1 k2 k3 k4 k5 =
( k1, k2, ( k3, k4, k5 ) )

Type that represents a composite key with 5 elements.


type alias Key6 k1 k2 k3 k4 k5 k6 =
( k1, k2, ( k3, k4, ( k5, k6 ) ) )

Type that represents a composite key with 6 elements.


type alias Key7 k1 k2 k3 k4 k5 k6 k7 =
( k1, k2, ( k3, k4, ( k5, k6, k7 ) ) )

Type that represents a composite key with 7 elements.


type alias Key8 k1 k2 k3 k4 k5 k6 k7 k8 =
( k1
, k2
, ( k3
, k4
, ( k5
, k6
, ( k7
, k8 ) ) ) 
)

Type that represents a composite key with 8 elements.


type alias Key9 k1 k2 k3 k4 k5 k6 k7 k8 k9 =
( k1
, k2
, ( k3
, k4
, ( k5
, k6
, ( k7
, k8
, k9 ) ) ) 
)

Type that represents a composite key with 9 elements.


type alias Key10 k1 k2 k3 k4 k5 k6 k7 k8 k9 k10 =
( k1
, k2
, ( k3
, k4
, ( k5
, k6
, ( k7
, k8
, ( k9
, k10 ) ) ) ) 
)

Type that represents a composite key with 10 elements.


type alias Key11 k1 k2 k3 k4 k5 k6 k7 k8 k9 k10 k11 =
( k1
, k2
, ( k3
, k4
, ( k5
, k6
, ( k7
, k8
, ( k9
, k10
, k11 ) ) ) ) 
)

Type that represents a composite key with 11 elements.


type alias Key12 k1 k2 k3 k4 k5 k6 k7 k8 k9 k10 k11 k12 =
( k1
, k2
, ( k3
, k4
, ( k5
, k6
, ( k7
, k8
, ( k9
, k10
, ( k11
, k12 ) ) ) ) ) 
)

Type that represents a composite key with 12 elements.


type alias Key13 k1 k2 k3 k4 k5 k6 k7 k8 k9 k10 k11 k12 k13 =
( k1
, k2
, ( k3
, k4
, ( k5
, k6
, ( k7
, k8
, ( k9
, k10
, ( k11
, k12
, k13 ) ) ) ) ) 
)

Type that represents a composite key with 13 elements.


type alias Key14 k1 k2 k3 k4 k5 k6 k7 k8 k9 k10 k11 k12 k13 k14 =
( k1
, k2
, ( k3
, k4
, ( k5
, k6
, ( k7
, k8
, ( k9
, k10
, ( k11
, k12
, ( k13
, k14 ) ) ) ) ) ) 
)

Type that represents a composite key with 14 elements.


type alias Key15 k1 k2 k3 k4 k5 k6 k7 k8 k9 k10 k11 k12 k13 k14 k15 =
( k1
, k2
, ( k3
, k4
, ( k5
, k6
, ( k7
, k8
, ( k9
, k10
, ( k11
, k12
, ( k13
, k14
, k15 ) ) ) ) ) ) 
)

Type that represents a composite key with 15 elements.


type alias Key16 k1 k2 k3 k4 k5 k6 k7 k8 k9 k10 k11 k12 k13 k14 k15 k16 =
( k1
, k2
, ( k3
, k4
, ( k5
, k6
, ( k7
, k8
, ( k9
, k10
, ( k11
, k12
, ( k13
, k14
, ( k15
, k16 ) ) ) ) ) ) ) 
)

Type that represents a composite key with 16 elements.