2016-04-02 16 views
0

Böyle bir kod parçası buldum. Bu benim için anlaşılabilir bir durum değil çünkü sonuçta, Either yapıcı türü iki argüman alır (Either a b) ve burada bir tane aldı. Neden mümkün olduğunu anlamıyorum.İki argümandan oluşan bir argüman.

cevap

8

Tipik işlevler gibi kurucular, Haskell'de körelirler. Bu, Either, bir argüman gibi iki argüman alan bir kurucu verebilir ve sonuç, tam bir Either oluşturmak için yalnızca bir bağımsız değişken gerektiren bir tür kurucudur.

Monad typeclass basit türler için değil, bir bağımsız değişken alan yazmacılar içindir. Örneğin, instance Monad Maybe var, ancak Maybe bir tür değil, bir bağımsız değişken alarak bir tür yapıcıdır. Bu nedenle, örneğini Monad örneğiyle yapamazsınız, çünkü iki argüman alır, bir değil ve Either a b örneğini yapamazsınız, çünkü hiçbir argüman almaz. Either a'u bir monad örneği yapabilirsiniz. Haskell'de

, basit tip Maybe gibi bir argüman alan bir tür yapıcı tür * -> * sahiptir, nazik * vardır ve Either tür * -> * -> * sahip olduğunu söylüyorlar. Monad, * -> * türünde bir şey istiyor ve bir türünü Either'a göndererek, bunu elde edersiniz.

İlgili konular