Paraméterezett algebrai adattípusok

Példa

Hasznos adattípus:

data MaybeInt
    = NoInt
    | JustInt Int

Felhasználás:

-- safeDiv :: Int -> Int -> MaybeInt

Példa (folytatás)

Másik hasznos adattípus:

data MaybeChar
    = NoChar
    | JustChar Char

Általánosítás:

data Maybe a 
    = Nothing 
    | Just a
      deriving (Eq, Ord, Show, Typeable, Data)
safeDiv :: Integral a => a -> a -> Maybe a

A definícióban a típusváltozó. A típusváltozók kisbetűsek. Tetszőlegesen sok típusváltozó lehet.

Feladat: Biztonságos div [*]

Definiáljuk a biztonságos div függvényt!

safeDiv :: Integral a => a -> a -> Maybe a

Test>
Nothing :: Maybe Integer
Test>
Just 2 :: Maybe Integer

Feladat: Biztonságos head [*]

Definiáljuk a biztonságos fejelem függvényt!

safeHead :: [a] -> Maybe a

Test>
Nothing :: Maybe Int
Test>
Just 1 :: Maybe Integer

Feladat: Prelude.Either [*]

Definiáljuk újra a diszjunkt unió adatszerkezetet!


Test>
Test>
Test>
Test>

Feladat: Párok

Definiáljuk a párokat.

data Tuple2 a b   =  Tuple2 a b
Tuple2 'a' True :: Tuple2 Char Bool

Feladat: Hármasok

Definiáljuk a hármasokat.

data Tuple3 a b c =  Tuple3 a b c
Tuple3 'a' True "xx" :: Tuple3 Char Bool [Char]

Ez lenne a Prelude-ben:

(a Haskell 98 ezt nem engedi, így a speciális szintaxis miatt ezek beépített típusok):