Modulok Haskellben

  • Fájlnév nagy kezdőbetűvel kezdődik, .hs kezdőbetű
  • Fejléc kommenttel
  • module Modulnév where
    module Second where

Interpreter parancsok

  • Betöltés interpreterrel: :l fájlnév
  • Interpreter parancsok: :?
  • Fontosabbak: :cd, :l, :r (reload), :t (type)

Logikai típusok

-- Szám (Num a -> a): 
1, 4, 193
 
-- Karakter (Char): 
'a', '*', '\n'
 
-- Logikai (Bool): 
True, False

Nincs automatikus típus konverzió!

Függvény definíció

-- név minta def akció
   inc n     =   n + 1
 
-- Függvény mintaillesztéssel
-- A definíció előtt elvárt (az órákon), hogy meg legyen adva a típus definíció
not' :: Bool -> Bool
not' False = True
not' True = False
-- Ez a függvény nem formális paramétereket használ, hanem konkrét értéket fogad

Mintaillesztés

-- Az elsőként megadott illeszkedő mintát fogja végrehajtani
not' False = True
not' n     = False
 
-- Mivel az n paramétert nem használjuk fel a függvény törzsében, emiatt az alulvonás mintát célszerű használni
not' False = True
not' _     = False
-- A jobb oldalon az alulvonásra nem lehet hivatkozni, ezzel jelezzük, hogy ez nem lesz felhasználva
 
-- INTERPRETER
:t not'
>> not' :: Bool -> Bool 
 
:t not' True
>> not' :: True -> Bool

Számértékek

  • Integral = nem típus, hanem az egész értékek csoportja
    • Int: korlátolt pontosság
    • Integer: tetszőleges pontosságú típus (alapértelmezett)
  • Nincs a kettő között automatikus átjárás
>> 2^64 :: Int -- itt nem konverzió történik, hanem így fog a függvény megszületni
 
>> (3 :: Int) + (4 :: Integer)  -- Ez nem működik!
  • Fractional - ez sem típus!
    • Double: alapértelmezett, dupla pontosság
    • Float: egyszeres pontosság

Mintaillesztés számokra
isZero :: Int -> Bool
isZero 0 = True
isZero _ = False
 
-- Megadható típuscsoportokként is (method overloading)
-- Erről később majd többet beszélünk
isZero :: Integral a => a -> Bool
isZero 0 = True
isZero _ = False