module Data.Universe.Instances.Read (
	-- | A 'Read' instance for functions, given the input is 'Finite' and
	-- 'Ord' and both the input and output are 'Read'.
	) where

import Data.Map (fromList, (!))
import Data.Universe

-- actually, the "Finite a" part of the context wouldn't be inferred if you
-- asked GHC -- but it's kind of hopeless otherwise!
instance (Finite a, Ord a, Read a, Read b) => Read (a -> b) where
	readsPrec n s = [((fromList v !), s') | (v, s') <- readsPrec n s]