Modulrendszer

Haskell modulok

A modul a fordítási egység.

Egy modul szintaxisa:

Modul fejléc

Modul fejléc lehet:


Ha a modult máshol importálni akarjuk, akkor a fejléce nem lehet üres.

A modulnévnek nagybetűvel kell kezdődnie.

A modulnévnek meg kell egyeznie a fájlnévvel.

Exportlista

Példa:

-- module X 
--    ( f          -- függvény; konstans; mezőnév; metódus
--    , (+++)      -- operátor
--    , E (E1, E2) -- algebrai adatszerkezet
--    , F (f1, f2) -- osztály
--    , G (..)     -- algebrai adatszerkezet; osztály
--    , D          -- alg. adat.; típusszinoníma; osztály
--    ) where

Importlista elemei

-- import Y

Kvalifikált import:

-- import qualified Y

Átnevezés:

-- import Y as Y'

Válogatás/elrejtés:

-- import Y (f, g)
-- import Y hiding (f, g)

A kvalifikáció, átnevezés és válogatás/elrejtés keverhető.

Importált modul entitásait lehet kvalifikáltan vagy kvalifikáció nélkül használni. Kvalifikált importálás esetén csak kvalifikáltan lehet az importált entitásokat használni.

Kvalifikált nevek

Kvalifikált függvény-, konstans-, mező- és metódusnevek: X.f

Kvalifikált osztály- és típuskonstruktornevek: X.T

Kvalifikált operátornevek:

-- [1 Prelude.+ 2, (Prelude.+) 1 2]

Kvalifikált operátornevek, Haskell’:

-- [1 `Prelude.(+)` 2, Prelude.(+) 1 2]

Importlista “trükkök”

Ha ütközne egy-két használandó név:

-- import Y hiding (f, g)
-- import qualified Y

Több modul importálása azonos “névtérbe”:

-- import qualified Y as Z
-- import qualified V as Z

Hierarchikus modulrendszer

Ha a modul elérési útja A/B/C.hs, akkor a modul neve kötelezően A.B.C.

-- import Data.Char
-- x = Data.Char.toUpper 'a'

Literate Haskell

Ha a fájlnév .lhs végződésű, akkor a modulban minden sor megjegyzés, kivéve a > karakterrel kezdődő sorokat.

Haskell programok

Haskell modulok összessége programot alkot, ha

A Main modulnak nem kötelező a Main.hs/Main.lhs fájlban lennie.

Haskell programok futtatása

Futtatás: végrehajtjuk a Main modulbeli main akciót.

Futtatási lehetőségek:

Interpretálás

runhaskell paranccsal:

runhaskell Main.hs

A program többi moduljának abban a könyvtárban kell lennie ahol a runhaskell parancsot kiadjuk.

Haskell szkriptek

Unix-szerű rendszereken lehetőség van a Haskell programok szkriptként való futtatására is.

Példa:

#!/usr/bin/runhaskell
main = putStrLn "Hello World!"

Haskell programok fordítása

A fordítás GHC-vel:

ghc --make Main.hs

Ajánlott az optimalizáció bekapcsolása:

ghc --make -O2 Main.hs

Parancssori argumentumok lekérdezése

getArgs :: IO [String]

Példa: echo szerű program:

import System.Environment (getArgs)
import Data.List

main = do
    args <- getArgs
    putStrLn (intercalate " " args)