haskell n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
Haskell PowerPoint Presentation
Download Presentation
Haskell

Loading in 2 Seconds...

play fullscreen
1 / 23

Haskell - PowerPoint PPT Presentation


  • 204 Views
  • Uploaded on

Haskell. programming language. 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.

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'Haskell' - owen


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
haskell

Haskell

programming language

haskell is
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
haskell pros cons
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)
haskell namespaces
Main

main

True

a

Bool

Eq

-- modules (packages)

-- value variables (functions)

-- value constructors

-- type variables (generics)

-- type constructors

-- type classes (interfaces)

Haskell - namespaces
haskell syntax
Derived syntax

f x = expr

(x *)

(* y)

(*)

x `times` y

f $ g $ h x

(f . g . h) x

do a; b; c

-- lambda

-- sections

-- sections

-- sections

-- infix func

-- parens

-- compose

-- I/O bind

Haskell - syntax

Core syntax

f = \x -> expr

\y -> x * y

\x -> x * y

\x y -> x * y

times x y

f (g (h x))

f (g (h x))

a >>= b >>= c

haskell type syntax
Haskell - type syntax

life = 42 :: Int

life :: Int

life = 42

haskell types
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

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

Haskell - type system
haskell datatypes
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

Haskell - datatypes
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

Haskell - example programs
darcs overview
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
darcs interactive
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
parsec

Parsec

parser library

parsec combinators
many :: Parser a -> Parser [a]

many1 :: 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

-- < ... >

Parsec - combinators
parsec example parsers
Parsec - example parsers

number = many digit

string = between

(char ‘"’)

(char ‘"’)

(many anyChar)

lisp = number

<|> string

<|> identifier

<|> parens $ many $ lexeme lisp

xmonad

xmonad

X11 window manager

xmonad overview
XMonad - overview
  • Tilling window manager (like Ratpoison)
  • Libraries of extensions and status bars
  • Customizable (config file is the app)
  • Full keyboard accessibility
xmonad example config
XMonad - example config

module Main where

import XMonad

import System.Exit

import qualified XMonad.StackSet as W

import qualified Data.Map as M

myKeys conf@(XConfig {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

slide20

Yi

extensible text editor

yi overview
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)
yi structure
Yi - structure

Taken from <http://www.cse.unsw.edu.au/~dons/papers/SC05.html>

haskell1

Haskell

Thank You