Skip to content

Instantly share code, notes, and snippets.

@manpages
Last active December 3, 2015 11:41
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save manpages/eab16fbcdf54566da4fc to your computer and use it in GitHub Desktop.
Save manpages/eab16fbcdf54566da4fc to your computer and use it in GitHub Desktop.
Slides in your GHCi
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