2011-08-26 12 views
28

Haskell kütüphaneleri içinde Applicative sınıfına bakıyordum ve Alternative arasında tökezledim.Haskell - Control.Applicative.Alternative ne işe yarar?

Bu sınıf ne işe yarar? Bir google araması, özellikle anlayışlı bir şey ortaya koymadı. Ve uygulama paketi ile olduğu gibi, tamamen yerinde olmayan gibi görünüyor.

Birisi, bu sınıfı kullanabileceğiniz olası bir senaryo gönderebilir mi?

cevap

22

Bu, ayrıştırıcı birleştiricilerle yaygın olarak kullanılır. Örneğin, space, tek bir boşluk karakteriyle eşleşen bir ayrıştırıcı birleştiriciyse, many space, ardışık boşluklarla eşleşecek bir olurdu.

Bununla birlikte, Control.Applicative numaralı telefondan biraz uzakta olduğunu kabul edebilirim.

+18

Sadece * hafif * yersiz - bir monoid MonadPlus' ve 'ArrowPlus', hem' aynı desende, Applicative's 'açıktır Bunların da bir modülü, temel aldıkları sınıfla paylaşırlar. Tutarlılık için “ApplicativePlus” olarak adlandırılan “olmalıdır” ama bu çirkin bir isim. –

+0

Pek çok şey açıklıyor! “Alternative” e “ApplicativePlus” ismini vermek iyi bir şey değildir, çünkü ikincisi kapsamını sınırlayan çağrışımlar vardır. –

+0

@C. A. McCann, yorumunuzu bir cevaba dönüştürmenizi diliyorum, böylece bunu kabul edebilirim :) –

16

Bazen <|> operatör oldukça yararlıdır:

foldl1 (<|>) [Nothing, Just 5, Just 3] 
-- Just 5 
+1

Ah bu ilginç! Bu bağlamda <|>, kısa devre gibidir || birçok zorunlu dilde operatör .. –

+3

Ayrıca bunu, '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' kullanarak yapabilirsiniz. html # t: Öncelikle). Bu [diğer 'Belki' monoids] için güzelce genelleşir (http://byorgey.wordpress.com/2011/04/18/monoids-for-maybe/). – hammar

+5

Oh, hayır, 'foldl1', mantıklı bir varsayılanın olduğu bir yerde kullanıldı (' foldl (<|>) Hiçbir şey '). Cevabınız çöktüğünde ne yapacaksınız? : D – Rotsor

İlgili konular