indique / elm-keysdict / KeysDict.Uniqueness


type Uniqueness house

A promise, that there are never 2 houses with equal keys for the same door.

listWithoutKeys=
  KeysDict.enterableBy 
    []--no promised Uniqueness

doorsInCasedLetter=
  [ door .inAlphabet
  , door .lowercase
  , door .uppercase
  ]

letters=
  KeyssDict.enterableBy doorsInCasedLetter
  |>putUp { inAlphabet= 0, lowercase= 'a', uppercase= 'A' }
  |>putUp { inAlphabet= 0, lowercase= 'α', uppercase= 'Α' }
    --rejected .inAlphabet key 0 is the same!
    -- → The KeysDict doesn't change

door : (house -> keyNeeded) -> Uniqueness house

What's a door? It's a spot to access a house if you have a matching key.

Give door one aspect of a house, and it will be ensured that this aspect of a house unique for all houses.

KeysDict.enterableBy
  [ door .lowercase, door .uppercase ]
|>putUp { lowercase= 'a', uppercase= 'A' }--put up
|>putUp { lowercase= 'a', uppercase= 'B' }
  --checked items: .lowercase key already exists! 
  --→ KeysDict is unchanged

just for extending core functionality

violated : house -> house -> Uniqueness house -> Basics.Bool

Do 2 values fail to fulfill Uniqueness?

door .name
|>violated
    { name= "smile", symbol= '😊' }
    { symbol= '🙂', name= "smile" }
--> True