SORU
27 Aralık 2013, Cuma


'in Haskell ($) sihirli bir operatör.

Demek aşağıdaki işlevleri var:

infixr 0 <|

{-# INLINE (<|) #-}
(<|) :: (a -> b) -> a -> b
f <| x = f x

foo :: a -> (forall b. b -> b) -> a
foo x f = f x

Aşağıdaki kontrol türü:

ghci> foo 3 <| id

Couldn't match expected type `forall b. b -> b'
            with actual type `a0 -> a0'
In the second argument of `(<|)', namely `id'
In the expression: f 3 <| id
In an equation for `it': it = f 3 <| id

Ancak, foo 3 $ idyok.

Tanımı (<|) (bildiğim kadarıyla) tanımı ile aynıdır ($). Ben çok fazla temel kütüphane kaynaklarından tanımı söküldü, ve her örneğini değişti ( $ ) (<|). Derleyici büyü?

CEVAP
27 Aralık 2013, Cuma


Evet, ($) etrafında derleyici sihirli küçük bir miktar impredicative türleri var. Herkes beklediği için tanıtıldı

runST $ do
  foo
  bar
  baz

typecheck için, ama normalde bunu yapamazsınız. Daha fazla bilgi için bkz here (8* *arama), email email Bu. Kısacası aslında impredicative türlerinin ortak davayı çözmek için yeteneği veren, tip denetimi için özel olarak ($) özel bir kural var.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • EminemVEVO

    EminemVEVO

    12 Mayıs 2009
  • hydejiaqi

    hydejiaqi

    12 Mart 2008
  • TechShowsYou

    TechShowsYou

    3 Mart 2011