Főmenü megnyitása

Módosítások

</source>
 
==== Osztalyok alkalmazasa ====
 
Ha egy típus példánya egy osztálynak, a fordítóprogram ezt az információt természetesen ismeri. Amikor azonban egy típusváltozót használunk pl. egy függvény szignatúrájában, arról a fordító nem garantálhatja, rendelkezik a használatához szükséges feltételekkel. Pélául, hogy ''a'' eleme annak annak osztálynak, melynek a metódusát használjuk.
 
<source lang=haskell>
toString :: (Show a, Show b) => a -> b -> String
toString a b = show a ++ show b
</source>
 
Erre lehet úgy is gondolni, hogy ''a'' is és ''b'' is rendelkezik a ''Show'' 'tulajdonsággal'
 
 
==== Típus függvenyek ====
 
Haskellben lehetőseg van un. típusfuggvények megadására osztályokban.
Erre olyan esetekben lehet szükség ahol egy függvénynek nem csupán a bemeneti paraméterei lehetnek többféle típusúak, hanem a valamely bemeneti pereméterének típusától függően a visszatérési értékének típusa is. Vagy valamely bemeneti paraméterének típusától függően egy másik bemeneti paraméter típusa.
 
Példaképp: Egy két paraméteres függvény bementi típusai határozzák meg visszatérési értékének típusát is. A bemeneti értékeken végezhető műveleteket ugyan az az osztály szolgáltassa
<source lang=haskell>
class AbsType a where
type AbsResult
absAdd :: a -> a -> a
absMul :: a -> a -> a
result :: a -> AbsResult a
 
foo :: (AbsType a) => a -> a -> AbsResult a
foo a b = result (absAdd (absMul a b) a)
</source>
 
Egy lehetséges példányosítás
 
<source lang=haskell>
instance AbsType Int where
type AbsResult = String
absAdd = (+)
absMul = (-)
result = show
</source>
 
 
Felhasználása igen sokrétű lehet, használatához könnyű hozzászokni. Mivel más nyelvekben nincs ilyen szolgáltalás, hiányolja a hozzászokott programozó.
 
== Referencia ==
Névtelen felhasználó