packages feed

hwk-0.3: Config.hs

{-# LANGUAGE FlexibleInstances #-}

module Hwk where

import Data.List (intercalate)

-- | modules to be imported into hint
-- these modules must be from installed packages
userModules :: [String]
userModules = [ "Prelude", "Data.List", "Data.Char", "Data.Bool"
              -- , "Data.List.Extra", "Data.Tuple.Extra"
              , "System.FilePath"
              ]

-- you can put user hwk functions here:


int :: String -> Int
int str = read str :: Int

ints :: [String] -> [Int]
ints = map int

------ below here all required internal machinery ------

-- | toString and toList are required by hwk
-- They determine the types of functions hwk can interpret,
-- allowing some simple polymorphism.

-- ToString allows handling functions of type: ToString a => String -> a
class ToString a where
  toString :: a -> String
instance ToString String where
  toString x = x
instance ToString [String] where
  toString = unwords
instance ToString [[String]] where
  toString = intercalate "\t" . map unwords
instance ToString Int where
  toString x = show x
instance ToString [Int] where
  toString lst = unwords $ map show lst

-- ToList allows handling functions of type: ToList a => [String] -> a
class ToList a where
  toList :: a -> [String]
instance ToList String where
  toList x = [x]
instance ToList [String] where
  toList = id
instance ToList [[String]] where
  toList = map (intercalate "\t")
instance ToList Int where
  toList x = [show x]
instance ToList [Int] where
  toList lst = map show lst