miso
Copyright(C) 2016-2026 David M. Johnson
LicenseBSD3-style (see the file LICENSE)
MaintainerDavid M. Johnson <code@dmj.io>
Stabilityexperimental
Portabilitynon-portable
Safe HaskellNone
LanguageHaskell2010

Miso.Data.Map

Description

Overview

Miso.Data.Map is a Haskell wrapper around the JavaScript Map object. Values of type Map k v live in JavaScript memory; all operations run in IO and mutate the underlying JS map in place.

Unlike Map, keys do not require an Ord instance — any type with a ToJSVal instance can serve as a key, including JS objects and numeric values that compare by identity.

Use this module when you need to share a key-value structure with a browser API or a third-party JavaScript library. For pure Haskell processing, prefer Map.

Import qualified to avoid clashing with Prelude:

import qualified Miso.Data.Map as M

Quick start

import qualified Miso.Data.Map as M

example :: IO ()
example = do
  m <- M.fromList [("a", 1), ("b", 2 :: Int)]
  M.insert "c" 3 m
  v <- M.lookup "b" m   -- Just 2
  n <- M.size m          -- 3
  M.delete "a" m
  pure ()

Operations

See also

Synopsis

Type

data Map key value Source #

Instances

Instances details
FromJSVal (Map key value) Source # 
Instance details

Defined in Miso.Data.Map

Methods

fromJSVal :: JSVal -> IO (Maybe (Map key value)) Source #

fromJSValUnchecked :: JSVal -> IO (Map key value) Source #

ToJSVal (Map key value) Source # 
Instance details

Defined in Miso.Data.Map

Methods

toJSVal :: Map key value -> IO JSVal Source #

Construction

new :: IO (Map key value) Source #

Constructs a new JS Map in IO.

fromList Source #

Arguments

:: (ToJSVal key, ToJSVal value) 
=> [(key, value)]

Key-value pairs to populate the new map with

-> IO (Map key value) 

Construct a Map from a list of key value pairs.

Operations

insert Source #

Arguments

:: (ToJSVal key, ToJSVal value) 
=> key

Key to associate the value with

-> value

Value to store

-> Map key value

Map to mutate

-> IO () 

Inserts a value into the Map by key.

lookup Source #

Arguments

:: (ToJSVal key, FromJSVal value) 
=> key

Key to look up

-> Map key value

Map to query

-> IO (Maybe value) 

Finds a value in the Map by key.

clear :: Map key value -> IO () Source #

Empties the Map.

size :: Map key value -> IO Int Source #

Return the size of Map.

has Source #

Arguments

:: ToJSVal key 
=> key

Key to test for membership

-> Map key value

Map to query

-> IO Bool 

Checks existence of a value by key, returns t'Bool.

delete Source #

Arguments

:: ToJSVal key 
=> key

Key to remove

-> Map key value

Map to mutate

-> IO Bool 

Removes an entry from the Map, returns True if the key existed.