{ "auto_complete": { "selected_items": [ [ "get", "getShowCourseR" ], [ "err", "errorMsgs" ], [ "set", "setMessage" ] ] }, "buffers": [ { "file": "src/Application.hs", "settings": { "buffer_size": 7271, "line_ending": "Unix" } }, { "file": "src/Foundation.hs", "settings": { "buffer_size": 11626, "encoding": "UTF-8", "line_ending": "Unix" } }, { "file": "src/Import.hs", "settings": { "buffer_size": 125, "line_ending": "Unix" } }, { "file": "src/Model.hs", "settings": { "buffer_size": 886, "line_ending": "Unix" } }, { "contents": "{-# LANGUAGE RecordWildCards #-}\n{-# LANGUAGE PatternGuards #-}\n{-# LANGUAGE TemplateHaskell #-}\n{-# LANGUAGE NoImplicitPrelude #-}\n{-# LANGUAGE OverloadedStrings #-}\n{-# LANGUAGE DeriveGeneric, DeriveDataTypeable #-}\nmodule Model.Types where\n\nimport ClassyPrelude\n\nimport Database.Persist.TH\nimport Database.Persist.Class\nimport Database.Persist.Sql\n\nimport Web.HttpApiData\n\nimport Data.Text (Text)\nimport qualified Data.Text as Text\n\nimport Text.Read (readMaybe)\n\n-- import Data.CaseInsensitive (CI)\nimport qualified Data.CaseInsensitive as CI\n\nimport Yesod.Core.Dispatch (PathPiece(..))\nimport Data.Aeson (FromJSON(..), ToJSON(..), withText, Value(..))\n\nimport GHC.Generics (Generic)\nimport Data.Typeable (Typeable)\n\n\ndata SheetType = Regular | Bonus | Extra \n deriving (Show, Read, Eq, Ord, Enum, Bounded) \nderivePersistField \"SheetType\"\n\ndata ExamStatus = Attended | NoShow | Voided\n deriving (Show, Read, Eq, Ord, Enum, Bounded) \nderivePersistField \"ExamStatus\"\n\n\ndata Season = Summer | Winter\n deriving (Show, Read, Eq, Ord, Enum, Bounded, Generic, Typeable)\n\nseasonToChar :: Season -> Char\nseasonToChar Summer = 'S'\nseasonToChar Winter = 'W'\n\nseasonFromChar :: Char -> Either Text Season\nseasonFromChar c\n | c ~= 'S' = Right Summer\n | c ~= 'W' = Right Winter\n | otherwise = Left $ \"Invalid season character: ‘\" <> tshow c <> \"’\"\n where\n (~=) = (==) `on` CI.mk\n\ndata TermIdentifier = TermIdentifier\n { year :: Integer -- ^ Using 'Integer' to model years is consistent with 'Data.Time.Calendar'\n , season :: Season\n } deriving (Show, Read, Eq, Ord, Generic, Typeable)\n\ntermToText :: TermIdentifier -> Text\ntermToText TermIdentifier{..} = Text.pack $ seasonToChar season : show year\n\ntermFromText :: Text -> Either Text TermIdentifier\ntermFromText t\n | (s:ys) <- Text.unpack t\n , Just year <- readMaybe ys\n , Right season <- seasonFromChar s\n = Right TermIdentifier{..}\n | otherwise = Left $ \"Invalid TermIdentifier: “\" <> t <> \"”\"\n\ninstance PersistField TermIdentifier where\n toPersistValue = PersistText . termToText\n fromPersistValue (PersistText t) = termFromText t\n fromPersistValue x = Left $ \"Expected TermIdentifier, received: \" <> tshow x\n\ninstance PersistFieldSql TermIdentifier where\n sqlType _ = SqlString\n\ninstance ToHttpApiData TermIdentifier where\n toUrlPiece = termToText\n\ninstance FromHttpApiData TermIdentifier where\n parseUrlPiece = termFromText\n\ninstance PathPiece TermIdentifier where\n fromPathPiece = either (const Nothing) Just . termFromText\n toPathPiece = termToText\n\ninstance ToJSON TermIdentifier where\n toJSON = String . termToText\n\ninstance FromJSON TermIdentifier where\n parseJSON = withText \"Term\" $ either (fail . Text.unpack) return . termFromText\n\ninstance Class Data where\n func = \n", "file": "src/Model/Types.hs", "file_size": 2724, "file_write_time": 131516115030281923, "settings": { "buffer_size": 2753, "encoding": "UTF-8", "line_ending": "Unix" } }, { "file": "src/Settings.hs", "settings": { "buffer_size": 5994, "line_ending": "Unix" } }, { "file": "src/Handler/Common.hs", "settings": { "buffer_size": 781, "line_ending": "Unix" } }, { "file": "src/Handler/Home.hs", "settings": { "buffer_size": 2324, "line_ending": "Unix" } }, { "file": "src/Handler/Assist.hs", "settings": { "buffer_size": 2858, "encoding": "UTF-8", "line_ending": "Unix" } }, { "file": "templates/newcourse.hamlet", "settings": { "buffer_size": 606, "encoding": "UTF-8", "line_ending": "Unix" } }, { "file": "src/Handler/Profile.hs", "settings": { "buffer_size": 411, "line_ending": "Unix" } }, { "file": "models", "settings": { "buffer_size": 4388, "encoding": "UTF-8", "line_ending": "Unix" } }, { "file": "stack.yaml", "settings": { "buffer_size": 2233, "line_ending": "Unix" } } ], "build_system": "", "build_system_choices": [ ], "build_varint": "", "command_palette": { "height": 121.0, "last_filter": "", "selected_items": [ ], "width": 523.0 }, "console": { "height": 192.0, "history": [ "help", "ll" ] }, "distraction_free": { "menu_visible": true, "show_minimap": false, "show_open_files": false, "show_tabs": false, "side_bar_visible": false, "status_bar_visible": false }, "file_history": [ "/home/jost/programming/Haskell/Yesod/uniworx/src/Handler/Comment.hs" ], "find": { "height": 52.0 }, "find_in_files": { "height": 128.0, "where_history": [ "" ] }, "find_state": { "case_sensitive": false, "find_history": [ "Html", "setMessage", "Text", "Integer", "matrikel", "AuthId", "FileInfo", "fileInfo" ], "highlight": true, "in_selection": false, "preserve_case": false, "regex": false, "replace_history": [ ], "reverse": false, "show_context": true, "use_buffer2": true, "whole_word": false, "wrap": true }, "groups": [ { "selected": 8, "sheets": [ { "buffer": 0, "file": "src/Application.hs", "semi_transient": false, "settings": { "buffer_size": 7271, "regions": { }, "selection": [ [ 0, 0 ] ], "settings": { "syntax": "Packages/Haskell/Haskell.sublime-syntax", "tab_size": 4, "translate_tabs_to_spaces": true }, "translation.x": 0.0, "translation.y": 0.0, "zoom_level": 1.0 }, "stack_index": 12, "type": "text" }, { "buffer": 1, "file": "src/Foundation.hs", "semi_transient": false, "settings": { "buffer_size": 11626, "regions": { }, "selection": [ [ 9330, 9330 ] ], "settings": { "syntax": "Packages/Haskell/Haskell.sublime-syntax", "tab_size": 4, "translate_tabs_to_spaces": true }, "translation.x": 0.0, "translation.y": 5125.0, "zoom_level": 1.0 }, "stack_index": 6, "type": "text" }, { "buffer": 2, "file": "src/Import.hs", "semi_transient": false, "settings": { "buffer_size": 125, "regions": { }, "selection": [ [ 0, 0 ] ], "settings": { "syntax": "Packages/Haskell/Haskell.sublime-syntax" }, "translation.x": 0.0, "translation.y": 0.0, "zoom_level": 1.0 }, "stack_index": 5, "type": "text" }, { "buffer": 3, "file": "src/Model.hs", "semi_transient": false, "settings": { "buffer_size": 886, "regions": { }, "selection": [ [ 0, 0 ] ], "settings": { "syntax": "Packages/Haskell/Haskell.sublime-syntax" }, "translation.x": 0.0, "translation.y": 0.0, "zoom_level": 1.0 }, "stack_index": 2, "type": "text" }, { "buffer": 4, "file": "src/Model/Types.hs", "semi_transient": false, "settings": { "buffer_size": 2753, "regions": { }, "selection": [ [ 2726, 2731 ] ], "settings": { "syntax": "Packages/Haskell/Haskell.sublime-syntax", "tab_size": 2, "translate_tabs_to_spaces": true }, "translation.x": 0.0, "translation.y": 1380.0, "zoom_level": 1.0 }, "stack_index": 1, "type": "text" }, { "buffer": 5, "file": "src/Settings.hs", "semi_transient": false, "settings": { "buffer_size": 5994, "regions": { }, "selection": [ [ 104, 104 ] ], "settings": { "syntax": "Packages/Haskell/Haskell.sublime-syntax", "tab_size": 4, "translate_tabs_to_spaces": true }, "translation.x": 0.0, "translation.y": 0.0, "zoom_level": 1.0 }, "stack_index": 11, "type": "text" }, { "buffer": 6, "file": "src/Handler/Common.hs", "semi_transient": false, "settings": { "buffer_size": 781, "regions": { }, "selection": [ [ 0, 0 ] ], "settings": { "syntax": "Packages/Haskell/Haskell.sublime-syntax" }, "translation.x": 0.0, "translation.y": 0.0, "zoom_level": 1.0 }, "stack_index": 10, "type": "text" }, { "buffer": 7, "file": "src/Handler/Home.hs", "semi_transient": false, "settings": { "buffer_size": 2324, "regions": { }, "selection": [ [ 404, 404 ] ], "settings": { "syntax": "Packages/Haskell/Haskell.sublime-syntax", "tab_size": 4, "translate_tabs_to_spaces": true }, "translation.x": 0.0, "translation.y": 138.0, "zoom_level": 1.0 }, "stack_index": 7, "type": "text" }, { "buffer": 8, "file": "src/Handler/Assist.hs", "semi_transient": false, "settings": { "buffer_size": 2858, "regions": { }, "selection": [ [ 454, 454 ] ], "settings": { "syntax": "Packages/Haskell/Haskell.sublime-syntax", "tab_size": 4, "translate_tabs_to_spaces": true }, "translation.x": 0.0, "translation.y": 0.0, "zoom_level": 1.0 }, "stack_index": 0, "type": "text" }, { "buffer": 9, "file": "templates/newcourse.hamlet", "semi_transient": false, "settings": { "buffer_size": 606, "regions": { }, "selection": [ [ 0, 0 ] ], "settings": { "syntax": "Packages/Text/Plain text.tmLanguage", "tab_size": 4, "translate_tabs_to_spaces": true }, "translation.x": 0.0, "translation.y": 0.0, "zoom_level": 1.0 }, "stack_index": 4, "type": "text" }, { "buffer": 10, "file": "src/Handler/Profile.hs", "semi_transient": false, "settings": { "buffer_size": 411, "regions": { }, "selection": [ [ 213, 213 ] ], "settings": { "syntax": "Packages/Haskell/Haskell.sublime-syntax" }, "translation.x": 0.0, "translation.y": 0.0, "zoom_level": 1.0 }, "stack_index": 8, "type": "text" }, { "buffer": 11, "file": "models", "semi_transient": false, "settings": { "buffer_size": 4388, "regions": { }, "selection": [ [ 747, 747 ] ], "settings": { "syntax": "Packages/Text/Plain text.tmLanguage", "tab_size": 2, "translate_tabs_to_spaces": true }, "translation.x": 0.0, "translation.y": 138.0, "zoom_level": 1.0 }, "stack_index": 3, "type": "text" }, { "buffer": 12, "file": "stack.yaml", "semi_transient": false, "settings": { "buffer_size": 2233, "regions": { }, "selection": [ [ 663, 663 ] ], "settings": { "syntax": "Packages/YAML/YAML.sublime-syntax" }, "translation.x": 0.0, "translation.y": 0.0, "zoom_level": 1.0 }, "stack_index": 9, "type": "text" } ] } ], "incremental_find": { "height": 33.0 }, "input": { "height": 0.0 }, "layout": { "cells": [ [ 0, 0, 1, 1 ] ], "cols": [ 0.0, 1.0 ], "rows": [ 0.0, 1.0 ] }, "menu_visible": true, "output.find_results": { "height": 0.0 }, "pinned_build_system": "", "project": "uniworx.sublime-project", "replace": { "height": 61.0 }, "save_all_on_build": true, "select_file": { "height": 0.0, "last_filter": "", "selected_items": [ [ "", "~/programming/Haskell/Yesod/uniworx/src/Handler/Assist.hs" ], [ "mo", "~/programming/Haskell/Yesod/uniworx/models" ], [ "a", "~/programming/Haskell/Yesod/uniworx/src/Handler/Assist.hs" ], [ "f", "~/programming/Haskell/Yesod/uniworx/src/Foundation.hs" ], [ "m", "~/programming/Haskell/Yesod/uniworx/models" ] ], "width": 0.0 }, "select_project": { "height": 0.0, "last_filter": "", "selected_items": [ ], "width": 0.0 }, "select_symbol": { "height": 0.0, "last_filter": "", "selected_items": [ ], "width": 0.0 }, "selected_group": 0, "settings": { }, "show_minimap": true, "show_open_files": false, "show_tabs": true, "side_bar_visible": true, "side_bar_width": 200.0, "status_bar_visible": true, "template_settings": { } }