diff options
author | Sean Whitton <spwhitton@spwhitton.name> | 2015-03-17 12:55:12 +0000 |
---|---|---|
committer | Sean Whitton <spwhitton@spwhitton.name> | 2015-03-17 12:55:12 +0000 |
commit | 94df9312f3461c4a6b53227bb1bab12965be3bd9 (patch) | |
tree | a83ffd6fffad28b26f09bbcd3d1dc222483978bb | |
parent | d2a2ece999eb879d051116b64f11998152f910df (diff) | |
download | sariulclocks-94df9312f3461c4a6b53227bb1bab12965be3bd9.tar.gz |
lookupSariulClass: better handling of bad classes
-rw-r--r-- | src/Data/Classes.hs | 17 | ||||
-rw-r--r-- | src/Types/Session.hs | 2 | ||||
-rw-r--r-- | src/Utils/ScoresFile.hs | 3 |
3 files changed, 14 insertions, 8 deletions
diff --git a/src/Data/Classes.hs b/src/Data/Classes.hs index 1e9df43..b7386d6 100644 --- a/src/Data/Classes.hs +++ b/src/Data/Classes.hs @@ -22,9 +22,14 @@ sariulClasses = zeroScores :: ScoresList zeroScores = foldr ((:) . (,emptyScore)) [] sariulClasses -lookupSariulClass :: Int -> Int -> Class -lookupSariulClass grade theClass = (head . filter choose) sariulClasses - where - choose (Class g n _) = theClass == n && process grade == g - process 5 = sariulGrade5 - process 6 = sariulGrade6 +lookupSariulClass :: Int -> Int -> Maybe Class +lookupSariulClass grade theClass = do + grade' <- case grade of + 5 -> Just sariulGrade5 + 6 -> Just sariulGrade6 + _ -> Nothing + let choose (Class g n _) = theClass == n && grade' == g + classes = filter choose sariulClasses + case classes of + [] -> Nothing + (x:xs) -> Just x diff --git a/src/Types/Session.hs b/src/Types/Session.hs index b7ff979..a4dba93 100644 --- a/src/Types/Session.hs +++ b/src/Types/Session.hs @@ -63,5 +63,5 @@ parseClassCookie s = parseClassCookie' :: String -> Maybe Class parseClassCookie' s = case splitOn "-" s of - g:c:[] -> Just $ lookupSariulClass (read g) (read c) + g:c:[] -> lookupSariulClass (read g) (read c) _ -> Nothing diff --git a/src/Utils/ScoresFile.hs b/src/Utils/ScoresFile.hs index 247c1b6..4028efa 100644 --- a/src/Utils/ScoresFile.hs +++ b/src/Utils/ScoresFile.hs @@ -12,6 +12,7 @@ import System.Directory (getDirectoryContents, getCurrentDirectory) import System.FilePath (takeExtension) import Control.Monad (liftM) import Data.List.Split (splitOn) +import Data.Maybe (fromJust) scoresToCSV :: ScoresList -> String scoresToCSV = unlines . foldr step [] @@ -26,7 +27,7 @@ scoresFromCSV csv = foldr step [] (lines csv) step line scores = (theClass, Score (read scoreString) (read timeString)) : scores where classString:scoreString:timeString:[] = splitOn "," line - theClass = lookupSariulClass ((head . read) classString) ((last . read) classString) + theClass = fromJust $ lookupSariulClass ((head . read) classString) ((last . read) classString) -- read to scores-XX.csv where XX is largest timestamp readScoresFile :: IO (Maybe ScoresList) |