1 / 23

Haskell

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.

owen
Télécharger la présentation

Haskell

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. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

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. Main main True a Bool Eq -- modules (packages) -- value variables (functions) -- value constructors -- type variables (generics) -- type constructors -- type classes (interfaces) Haskell - namespaces

  5. 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

  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. 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

  9. 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

  10. 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

  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. 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

  16. Parsec - example parsers number = many digit string = between (char ‘"’) (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 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

  20. 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 <http://www.cse.unsw.edu.au/~dons/papers/SC05.html>

  23. Haskell Thank You

More Related