Presentation is loading. Please wait.

Presentation is loading. Please wait.

Haskell programming language.

Similar presentations


Presentation on theme: "Haskell programming language."— Presentation transcript:

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


Download ppt "Haskell programming language."

Similar presentations


Ads by Google