{-# LANGUAGE MultiParamTypeClasses, FlexibleInstances, FlexibleContexts #-} module Inputter where import Data.Array.IO class (Ord a, Monad m) => Inputter c a m where input :: FilePath -> m (c a) instance (MArray a [String] IO) => Inputter (a Int) [String] IO where -- input :: FilePath -> IO (a Int [String]) input filename = do contents <- readFile filename let contentWords = map words $ lines contents l = length contentWords newListArray (0, l-1) contentWords