Maybe
bir type constructor ve onun iki olası data constructorsNothing
ve Just
bulunmaktadır. Yani Maybe 5
yerine Just 5
demek zorundasınız.
> let x = Just 5
> x
Just 5
> let y = Nothing
> y
Nothing
> :type x
x :: Maybe Integer
> :type y
y :: Maybe a
> :info Maybe
data Maybe a = Nothing | Just a -- Defined in Data.Maybe
instance Eq a => Eq (Maybe a) -- Defined in Data.Maybe
instance Monad Maybe -- Defined in Data.Maybe
instance Functor Maybe -- Defined in Data.Maybe
instance Ord a => Ord (Maybe a) -- Defined in Data.Maybe
instance Read a => Read (Maybe a) -- Defined in GHC.Read
instance Show a => Show (Maybe a) -- Defined in GHC.Show
Maybe
yeni türleri oluşturmak için kullanılır, çünkü bir tür yapıcı olduğu böyle bir tip
Maybe Int
(haber olabilir, (sonuç türü
Maybe a
içinde
a
türüne bağlıdır), artık hiçbir tür param
a
var yani, tüm tip parametreleri bağlanır).
Just a
ve
Nothing
, veri kurucularıdır, çünkü belirli bir
Maybe
türünün örneklerini oluşturmak için kullanılırlar, örneğin
Just Int
,
Maybe Int
örneklerini oluşturur.
Diğer önemli bir fark, yalnızca veri eşleştiricilerinde şablon eşleştirmesi yapabilmenizdir. *
case foo of
Just a -> ...
Nothing -> ...
Hem cevaplar tam olarak doğru, ama ben de maybe' (küçük harf m) * olduğu 'işaret etmek istiyorum:
Sen demek gerekecek: Söyleyemezsin b -> (a -> b) -> Belki a -> b' türünde bir işlev: "Belki işlev bir varsayılan değer, bir işlev ve bir Belki değeri alır. Belki değeri Hiçbir şey değilse, işlev varsayılan değeri döndürür.Aksi takdirde, işlevi Just içindeki değere uygular ve sonucu döndürür. " http://hackage.haskell.org/packages/archive/base/latest/doc/html/Prelude.html#v:maybe – MatrixFrog