Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Haskell Workshop: Basic Haskell

Kat Chuang
November 12, 2013

Haskell Workshop: Basic Haskell

Haskell Workshop teaches you how to read types and typeclasses.

Presented by Ryan Trinkle
Slides by Kat Chuang

Kat Chuang

November 12, 2013
Tweet

More Decks by Kat Chuang

Other Decks in Technology

Transcript

  1. Getting Started with Haskell
    Haskell Beginners’ Workshop
    NY Haskell Meetup
    November 12, 2013

    View full-size slide

  2. Why Haskell?
    ● Expressive
    ● Declarative
    ● Strongly typed
    ● Easy to refactor
    ● Referentially transparent

    View full-size slide

  3. Project Euler #1
    Multiples of 3 and 5
    Haskell
    sum [x | x <- [1..999] , x `mod` 3 == 0 || x `mod` 5 == 0]
    C
    int main(void)
    {
    int total=0;
    int i=0;
    while(i<1000)
    {
    if(i%3==0 || i%5==0)
    total+=i;
    i++;
    }
    printf("%d", total);
    }
    Python
    def multiples_of_3_or_5():
    for number in xrange(1000):
    if not number % 3 or not number % 5:
    yield number
    print sum(multiples_of_3_or_5())
    Or, you can use list comprehension
    print sum( number for number in xrange(1000) if not (number % 3 and number % 5) )

    View full-size slide

  4. Reading types
    "Hello, world!" :: String
    value type

    View full-size slide

  5. Basic types
    Text
    ● 'a' :: Char
    ● "asdf" :: String
    Numbers
    ● 1 :: Integer
    ● 0.5 :: Double
    Booleans
    ● True :: Bool
    ● False :: Bool
    Functions
    ● square ::
    Integer -> Integer

    View full-size slide

  6. Containers
    Lists
    ● [1, 2, 3] :: [Integer]
    ● ["Hello", "Goodbye"] :: [String]
    ● [True, False, True] :: [Bool]
    Tuples
    ● (1, 2) :: (Integer, Integer)
    ● (1, "Hello", True) :: (Integer, String, Bool)

    View full-size slide

  7. Containers
    Tuples of lists and vice versa
    ● [(1, "Hello"), (2, "Goodbye")] ::
    [(Integer, String)]
    ● ([1, 2, 3], ["Hello", "Goodbye"]) ::
    ([Integer], [String])

    View full-size slide

  8. GHCi Exercise - Type these commands
    Prelude> :t 'a'
    'a' :: Char
    Prelude> :t "Hello"
    "Hello" :: [Char]
    Why is it [Char], not String?
    type String = [Char]

    View full-size slide

  9. GHCi Exercise - Type these commands
    Prelude> :t 1
    1 :: Num a => a
    Prelude> :t 0.5
    0.5 :: Fractional a => a
    Why? 1 can be used with any numeric type;
    0.5 can be used with any numeric type that
    supports fractions

    View full-size slide

  10. Reading types
    1 :: Num a => a
    "1 can have any type a, where a is a numeric type"
    The context comes before the =>, and tells us about the
    type that follows.
    value type
    context

    View full-size slide

  11. Reading types
    1 :: Num a => a
    Num is a typeclass, not a type. A typeclass tells you about a
    type.
    Num a tells you that the type a must support numeric
    operations like +, *, and -
    value type
    context

    View full-size slide

  12. Functions
    Prelude> let square x = x^2
    Prelude> square 5
    25
    Prelude> :t square
    square :: Num a => a -> a

    View full-size slide

  13. Reading types
    square :: Num a => a -> a
    "square is a function that takes an a and returns an a,
    where a is a numeric type."
    Note: the input and output type must match: square
    cannot return a Float if you give it an Int.
    value
    input output
    context type

    View full-size slide

  14. GHCi
    Prelude> :i Num
    You can use :i to get
    information about
    something in GHCi.
    For a typeclass, :i will give
    you its operations and a list
    of types that are its
    instances.
    class Num a where
    (+) :: a -> a -> a
    (*) :: a -> a -> a
    (-) :: a -> a -> a
    negate :: a -> a
    abs :: a -> a
    signum :: a -> a
    fromInteger :: Integer -> a
    -- Defined in `GHC.Num'
    instance Num Integer -- Defined in `GHC.Num'
    instance Num Int -- Defined in `GHC.Num'
    instance Num Float -- Defined in `GHC.Float'
    instance Num Double -- Defined in `GHC.Float'

    View full-size slide

  15. Books
    learnyouahaskell.com book.realworldhaskell.org

    View full-size slide