SORU
23 EKİM 2012, Salı


Somut örnek monadlar kompozisyon altında kapalı olmadığımızı göstermek (kanıtı)?

Uygulamalı funktorlar kompozisyon altında kapalı olan tanınmış ama monadlar değildir. Ancak, sorun somut bir counterexample monadlar her zaman yazmak etmeyin gösteren bulmakta güçlük olmuştur.

This answer non-monad bir örnek olarak [String -> a] verir. Bir bit için uğraşırken, sezgisel olarak inanıyorum, ama bu cevabı sadece "olamaz" gerçekten herhangi bir gerekçe vermeden. uygulanmaya katıl diyor sonra Daha resmi bir şey istiyorum. Dersin Türü [String -> [String -> a]] -> [String -> a]; böyle bir işlevi mutlaka monad yasaları tatmin etmediğini göstermek gerekir işlevleri vardır.

Herhangi bir örnek (eşlik eden kanıt) yapacak; mutlaka özellikle yukarıdaki örneğin bir kanıt arıyorum.

CEVAP
3 Kasım 2012, CUMARTESİ


Küçük beton bir counterexample için, terminal monad düşünün.

data Thud x = Thud

return >>= Thud ve kanunları basit tutun.

Şimdi de Bool (diyelim, xor-monoid yapısı ile) yazar monad.

data Flip x = Flip Bool x

instance Monad Flip where
   return x = Flip False x
   Flip False x  >>= f = f x
   Flip True x   >>= f = Flip (not b) y where Flip b y = f x

Er, um, kompozisyon ihtiyacımız var

newtype (:.:) f g x = C (f (g x))

Şimdi tanımlamak için uğraşıyor

instance Monad (Flip :.: Thud) where  -- that's effectively the constant `Bool` functor
  return x = C (Flip ??? Thud)
  ...

Parametricity ??? sabit olmalı x, herhangi yararlı bir şekilde bağlı olamayacağını söyler. Sonuç olarak, join . return mutlaka sabit bir işlevi de, yasa dolayısıyla

join . return = id

biz her ne sebeble olursa olsun başarısız gerekir.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Benjamin Heckendorn

    Benjamin Hec

    4 Mayıs 2008
  • BlackBoxTV

    BlackBoxTV

    7 Mayıs 2007
  • Apple&Tech Reviews & Giveaways

    Apple&Tech R

    12 Temmuz 2008