Softwerkskammer

 

Kapitel 1 - Zusammenfassung

Hier die Zusammenfassung des ersten Kapitels von "Real World Haskell" und ein paar Diskussionsergebnissen dazu:

Chapter 1. Getting Started

Your Haskell environment

ghc, ghci, runghc

Getting started with ghci, the interpreter

  • aka REPL
  • Importieren von Modulen:
    1
    2
    3
    ghci> :module + Data.Ratio
          :m +Data.Ratio
          import Data.Ratio

Basic interaction: using ghci as a calculator

Simple arithmetic
  • infix vs prefix form:
    infix form: 2 + 2
    prefix form: (+) 2 2
  • *"Integers can be arbitrarily large."*
An arithmetic quirk: writing negative numbers
  • *"Haskell lets us define new operators at any time."*
Boolean logic, operators, and value comparisons
  • "not equal" Operator: /= (Haskell hat keine Zuweisungsoperatoren)
  • "not" Funktion (nicht "!")
Operator precedence and associativity
  • Precedence 0(low) - 9(high) (nicht wie im Buch angegeben 1-9)
  • links/rechts assoziativ
  • Operatoren sind "besondere Funktionen" die fixity rules besitzen
  • Möglichkeit der Erstellung von DSLs
  • Der Versuch, eine bestehende Funktion nachträglich mit fixity rules zu belegen, führt zu einem Parserfehler:
    1
    The fixity signature for `map' lacks an accompanying binding (The fixity signature must be given where `map' is declared)
Undefined values, and introducing variables
  • Exponentialfunktionen ** und ^

  • Typfehler wenn man ^ mit einer Kommazahl als Exponenten aufruft:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Prelude Data.Ratio> 1 ** 1.1
    1.0
    Prelude Data.Ratio> 1 ^ 1.1
     
    <interactive>:8:5:
        Ambiguous type variable `b0' in the constraints:
          (Fractional b0)
            arising from the literal `1.1' at <interactive>:8:5-7
          (Integral b0) arising from a use of `^' at <interactive>:8:3
        Probable fix: add a type signature that fixes these type variable(s)
        In the second argument of `(^)', namely `1.1'
        In the expression: 1 ^ 1.1
        In an equation for `it': it = 1 ^ 1.1

=> Fehlermeldung kann man lesen als: "^ erwartet Typeclass Integral, aber 1.1 ist Fractional"

Dealing with precedence and associativity rules
  • *"It is sometimes better to leave at least some parentheses in place"*

Command line editing in ghci

Lists

  • Enumeration notation: [x..y] (inklusive)
  • Intervallschritte
  • unendliche Listen, z.B.: [1..]
  • ".." ist kein Operator, sondern ein Sprachkonstrukt in Listenliteralen
  • Haskell unterstützt keine heterogenen Listen (alle Elemente müssen vom selben Typ sein)

Operators on lists

++ concat
: "cons" (einzelnes Element vorne anhängen)

Strings and characters

  • Strings sind Listen
  • concat (++) ist relativ teuer

First steps with types

  • *"Haskell requires type names to start with an uppercase letter, and variable names must start with a lowercase letter."*
  • Typdeklarationen mit ::
  • String ist ein Alias für [Char]
  • Parametrisierte Typen: Ratio Integer

A simple program

  • where ist ein Schlüsselwort, davor wird eine Variable benutzt die erst danach definiert wird

Sonstiges:

Organisatorisches:

  • Nächster Hangout wieder kommenden Dienstag 21 Uhr
  • Christian bereitet das zweite Kapitel vor

 

Wiki Links

Europaweite Veranstaltungen 2019
Jahreskalender von Konferenzen, Open Spaces, BarCamps und anderen Veranstaltungen