Download presentation
Presentation is loading. Please wait.
1
Haskell programming language
2
Haskell is… Memory managed (allocation, collection)
“Typeful” (static, strong) Types are checked at compile-time Types cannot be coerced (in general) Pure functional programming Emphasis on functions Referential transparency All variables are constant
3
Haskell - pros & cons Concurrency
The #1 on Language Shootout for threading All non-I/O code is concurrent by default (mutations are handled as I/O code) Readability No parentheses or commas Higher-order functions reduce lines-of-code (no syntax as a reminder of context)
4
Haskell - namespaces Main main True a Bool Eq -- modules (packages)
-- value variables (functions) -- value constructors -- type variables (generics) -- type constructors -- type classes (interfaces)
5
Haskell - syntax Derived syntax f x = expr (x *) (* y) (*) x `times` y
f $ g $ h x (f . g . h) x do a; b; c Core syntax f = \x -> expr \y -> x * y \x -> x * y \x y -> x * y times x y f (g (h x)) a >>= b >>= c -- lambda -- sections -- infix func -- parens -- compose -- I/O bind
6
Haskell - type syntax life = 42 :: Int life :: Int life = 42
7
Haskell - types “Hello” :: String length :: [a] -> Int
floor :: Float -> Int map :: (a -> b) -> [a] -> [b] 42 :: Int (+) :: Int -> Int -> Int 42 :: Num a => a (+) :: Num a => a -> a -> a
8
Haskell - type system Int, Word, Float, Double, Char
type String = [Char] data Maybe a = Nothing | Just a class Eq a where (==), (/=) :: a -> a -> Bool instance Eq Bool where True == True = True False == False = True _ == _ = False -- built-in types -- type synonyms -- data types -- type classes -- type class instances
9
Haskell - datatypes -- enumerations -- generics -- unlabeled record
data Bool = False | True data Tree a = Leaf a | Branch (Tree a) (Tree a) data Rect = Rect Int Int Int Int data Rect = Rect { x, y :: Int, width :: Int, height :: Int} -- enumerations -- generics -- unlabeled record -- labeled record
10
Haskell - example programs
main = return () main = putStrLn “Hello World” main = interact id main = interact (unlines . reverse . lines) main = do args <- getArgs case args of "-n":a -> putStr (unwords a) a > putStrLn (unwords a) -- null program -- hello world -- UNIX cat -- GNU tac -- UNIX echo
11
version control system
12
Darcs - overview The Theory of Patches A “branch” is a set of patches
“Spontaneous branches” Every checkout is a branch Every checkout is a repository
13
Darcs - interactive Interactive “pull”
You chose what patches to download Interactive “push” You chose what patches to commit externally Interactive “record” You chose what files to commit locally
14
Parsec parser library
15
Parsec - combinators many :: Parser a -> Parser [a]
optional :: Parser a -> Parser (Maybe a) sepBy :: Parser a -> Parser s -> Parser [a] sepBy1 :: Parser a -> Parser s -> Parser [a] endBy :: Parser a -> Parser s -> Parser [a] endBy1 :: Parser a -> Parser s -> Parser [a] char :: Char -> Parser Char between :: Parser open -> Parser close -> Parser a -> Parser a -- like regex* -- like regex+ -- like regex? , ... , ... ; ... ; ... ; -- c -- < ... >
16
Parsec - example parsers
number = many digit string = between (char ‘"’) (many anyChar) lisp = number <|> string <|> identifier <|> parens $ many $ lexeme lisp
17
xmonad X11 window manager
18
XMonad - overview Tilling window manager (like Ratpoison)
Libraries of extensions and status bars Customizable (config file is the app) Full keyboard accessibility
19
XMonad - example config
module Main where import XMonad import System.Exit import qualified XMonad.StackSet as W import qualified Data.Map as M myKeys {XMonad.modMask = modMask}) = M.fromList $ [ ((modMask .|. shiftMask, xK_Return), spawn $ XMonad.terminal conf), ((modMask .|. shiftMask, xK_q ), io (exitWith ExitSuccess))] myMouseBindings (XConfig {XMonad.modMask = modMask}) = M.fromList $ [ ((modMask, button1), (\w -> focus w >> mouseMoveWindow w)), ((modMask, button2), (\w -> focus w >> windows W.swapMaster)), ((modMask, button3), (\w -> focus w >> mouseResizeWindow w))] defaults = defaultConfig { keys = myKeys, mouseBindings = myMouseBindings, terminal = "xterm"} main = xmonad defaults
20
extensible text editor
Yi extensible text editor
21
Yi - overview Extensible Fully dynamic application (hs-plugins)
All state is serialized and reloaded Customizable yi --as=vim (for vim key bindings) yi --as=emacs (for emacs key bindings)
22
Yi - structure Taken from <
23
Haskell Thank You
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.