{-# LANGUAGE NoImplicitPrelude #-}

module Data.Morpheus.Internal.Ext
  ( Eventless,
    Failure (..),
    PushEvents (..),
    Result (..),
    ResultT (..),
    cleanEvents,
    resultOr,
    SemigroupM (..),
    mapEvent,
    unpackEvents,
    sortErrors,
    unsafeFromList,
    (<:>),
    resolveWith,
    runResolutionT,
  )
where

import Data.Morpheus.Ext.KeyOf
import Data.Morpheus.Ext.Map
import qualified Data.Morpheus.Ext.OrdMap as OM
import Data.Morpheus.Ext.Result
import qualified Data.Morpheus.Ext.SafeHashMap as SHM
import Data.Morpheus.Ext.SemigroupM
import Relude

class UnsafeFromList f where
  unsafeFromList :: (Hashable k, KeyOf k a, Eq k) => [(k, a)] -> f k a

instance UnsafeFromList OM.OrdMap where
  unsafeFromList :: [(k, a)] -> OrdMap k a
unsafeFromList = [(k, a)] -> OrdMap k a
forall k a. (Hashable k, Eq k) => [(k, a)] -> OrdMap k a
OM.unsafeFromList

instance UnsafeFromList SHM.SafeHashMap where
  unsafeFromList :: [(k, a)] -> SafeHashMap k a
unsafeFromList = [(k, a)] -> SafeHashMap k a
forall k a. (Eq k, Hashable k) => [(k, a)] -> SafeHashMap k a
SHM.unsafeFromList