Similarly to Nonempty String and Nonempty List provides a type that is guaranteed to have at least one entry.
It consist of a key-value pair and a regular Dict
type NonemptyDict comparable v
= NonemptyDict ( ( comparable, v ), Dict comparable v ) -- the constructor is opaquehence it only allows comparable keys (same as Dict) and it exposes function head : NonemptyDict comparable v -> ( comparable, v ) that is guaranteed to succeed (no Maybe) and returns the key-value pair with the lowest key
(Note on performance: Dict is always internally ordered to make the operations on it fast - that's why it allows only comparable key - so this head functions is inexpensive as well as in only adds one more comparison of keys)
Has very similar functions to the regular Dict with a few exceptions
returns Maybe
remove : comparable -> NonemptyDict comparable v -> Maybe (NonemptyDict comparable v)has one more parameter (comparable,v) so that non-emptiness is guaranteed
fromList : ( comparable, v ) -> List ( comparable, v ) -> NonemptyDict comparable vNot sure about that but I am using it for tracking errors when constructing a record out of user input (form) where key is field index. So it is something like a nonempty Array (Maybe error) but you don't have to deal with inserting the Nothings as Arrays can't have holes i.e.
Array.fromList ["a","b"]
|> Array.set "d" -- there is gap between last index (1 - where "b" is) and index we are trying to set
|> Array.toList ["a","b"] -- hence the the "d" is lostThe construction fails only when there is an error so there is a guarantee that there will be at least one entry
and it should be possible to ask - give me only the first error that occurred (hence the above-mentioned function head)