{-# OPTIONS_GHC -fno-warn-orphans #-}

module Data.Universe.Instances.Reverse.WithIndex
  (
  ) where

import ClassyPrelude

import Data.Universe
import Control.Lens.Indexed

import Data.Universe.Instances.Reverse ()

import qualified Data.Map.Strict as Map


instance Finite a => FoldableWithIndex a ((->) a) where
  ifoldMap f g = fold [ f x (g x) | x <- universeF ]
instance (Ord a, Finite a) => TraversableWithIndex a ((->) a) where
  itraverse f g = (Map.!) . Map.fromList <$> sequenceA [ (x, ) <$> f x (g x) | x <- universeF ]
