{-# LANGUAGE MultiParamTypeClasses, FlexibleInstances, FlexibleContexts #-} module Alphabetizer where import Data.List import Data.Array.IO class (Ord a, Monad m) => Alphabetizer c a m where alphabetize :: c a -> m (c a) instance (Ord a, Monad m) => Alphabetizer [] a m where alphabetize = return . sort instance (Ord e, Ix i, Monad m, MArray a [e] m) => Alphabetizer (a i) [e] m where alphabetize c = mapArray sort c