Softwerkskammer

 

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:
    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:
    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:
    Prelude Data.Ratio> 1 ** 1.1
    1.0
    Prelude Data.Ratio> 1 ^ 1.1

    :8:5:
    Ambiguous type variable b0' in the constraints: (Fractional b0) arising from the literal 1.1' at :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