Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/eeue56/elm-all-dict
A dict for Elm which can store any type
https://github.com/eeue56/elm-all-dict
Last synced: about 1 month ago
JSON representation
A dict for Elm which can store any type
- Host: GitHub
- URL: https://github.com/eeue56/elm-all-dict
- Owner: eeue56
- Created: 2015-10-31T19:36:07.000Z (about 9 years ago)
- Default Branch: master
- Last Pushed: 2018-02-19T18:07:42.000Z (almost 7 years ago)
- Last Synced: 2024-05-22T01:07:09.993Z (8 months ago)
- Language: Elm
- Size: 25.4 KB
- Stars: 36
- Watchers: 3
- Forks: 5
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# elm-all-dict
This library provides two Dict implementations. Firstly, it provides `AllDict`, a dictionary which you may pass a hashing function in order to allow all types to be stored as keys.
Secondly, it provides `EveryDict`, a dictionary which uses `toString` as a hashing function.
This is a dictionary based off of core's Dict implementation, except it can support any type, rather than just `comparable`s. A function must be given which will hash the key into a `comparable`.
```elm
module Main where
import Graphics.Element exposing (show)
import AllDict exposing (AllDict)
import EveryDict exposing (EveryDict)type Action = Run | Hide | StandStill
ord : Action -> Int
ord action =
case action of
Run -> 0
Hide -> 1
StandStill -> 2actionDict : AllDict Action String Int
actionDict =
AllDict.fromList
ord
[ (Run, "Run away!")
, (Hide, "Coward!")
, (StandStill, "Err...")]actionDict2 : EveryDict Action String
actionDict2 =
EveryDict.fromList
[ (Run, "Run away!")
, (Hide, "Coward!")
, (StandStill, "Err...")]main = show <| EveryDict.toList actionDict2
```## EveryDict
EveryDict uses a custom implementation of `toString` in order to allow functions to be used as keys. The current implementation of `toString` doesn't actually work properly when functions are defined in the format
```javascript
var f = function() ...
```This is down to the fact `toString` uses the `.name` of the functions - this is obviously not defined when using the variable binding to anonymous functions that is common in JS.