eeue56/elm-all-dict


A dict for Elm which can store any type

Language: Elm


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 comparables. A function must be given which will hash the key into a comparable.

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 -> 2

actionDict : 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

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.

Project Statistics

Sourcerank 7
Repository Size 25.4 KB
Stars 33
Forks 3
Watchers 2
Open issues 0
Dependencies 1
Contributors 3
Tags 7
Created
Last updated
Last pushed

Top Contributors See all

Noah Arya Irani Kris Jenkins

Packages Referencing this Repo

eeue56/elm-all-dict
A Elm dict implementation that can store any type
Latest release 2.0.1 - Updated - 33 stars

Recent Tags See all

2.0.1 November 15, 2016
2.0.0 October 16, 2016
1.1.2 May 02, 2016
1.1.1 October 31, 2015
1.1.0 October 31, 2015
1.0.1 October 31, 2015
1.0.0 October 31, 2015

Something wrong with this page? Make a suggestion

Last synced: 2016-11-15 19:52:25 UTC

Login to resync this repository