Last active
December 3, 2015 11:41
-
-
Save manpages/eab16fbcdf54566da4fc to your computer and use it in GitHub Desktop.
Slides in your GHCi
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import qualified System.IO.Strict as StrictIO | |
import qualified System.Directory as Dir | |
import qualified Data.Text as T | |
:set +m | |
:set prompt "\ESC[1;34m%s\n\ESC[0;34mλ> \ESC[m" | |
:set -XNoMonomorphismRestriction | |
:set -XRankNTypes | |
:set -XOverloadedStrings | |
:set -XScopedTypeVariables | |
-- Slides in my ghci! | |
let slide_ = StrictIO.readFile ".slide" | |
let xpp_ x = show $ (read x) + 1 | |
let xmm_ x = show $ (read x) - 1 | |
let slide_fioZero = do { writeFile ".slide" "0" ; | |
return "0" } | |
let slide_fioPlusPlus = do { x <- slide_ ; | |
writeFile ".slide" $ xpp_ x ; | |
return $ xpp_ x } | |
let slide_fioMinusMinus = do { x <- slide_ ; | |
writeFile ".slide" $ xmm_ x ; | |
return $ xmm_ x } | |
let slide_fioPut x = do { writeFile ".slide" x ; | |
return x } | |
let slide_present _ = return $ unlines [ "slide <- slide_fioZero" | |
, ":!clear" | |
, ":next" ] | |
let slide_next _ = let loadMaybe x = do { | |
que <- Dir.doesFileExist (x ++ ".hs") ; | |
if que | |
then return [ ":!clear" | |
, "lastRead <- readFile \"" ++ x ++ ".hs\"" | |
, "putStrLn lastRead" | |
, ":load " ++ x ++ ".hs" ] | |
else return [] | |
} in do { | |
ioSlide <- slide_fioPlusPlus ; | |
ioCode <- loadMaybe ioSlide ; | |
return $ unlines $ [ ":!clear" | |
, "lastRead <- readFile \"" ++ ioSlide ++ ".txt\"" | |
, "putStr lastRead" | |
, ":!read" | |
] ++ (ioCode :: [String]) ++ [ ":script ~/.ghci" ] } | |
let slide_previous _ = slide_fioMinusMinus >> slide_fioMinusMinus >> slide_next "" | |
let slide_goto x = slide_fioPut x >> slide_fioMinusMinus >> slide_next "" | |
:def! present slide_present | |
:def! next slide_next | |
:def! previous slide_previous | |
:def! goto slide_goto |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment