{-# Language NoMonomorphismRestriction #-}

module MultiSet where

import qualified Data.Map as M
import Prelude.Compat

newtype MultiSet a = MultiSet { unMultiSet :: M.Map a Int } deriving (Eq, Ord, Show)

fromList = MultiSet . foldr (\ v -> M.insertWith (+) v 1) M.empty