{-# LANGUAGE MultiParamTypeClasses, FlexibleInstances, FlexibleContexts, UndecidableInstances #-} module Outputter where import Data.Array.IO (Ix) import Data.Array.Base (MArray, getElems) class (Show a, Monad m) => Outputter c a m where output :: c a -> m () instance (Show a) => Outputter [] a IO where output = print instance (Show e, Ix i, MArray a e IO) => Outputter (a i) e IO where output c = getElems c >>= print