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

  • Disney Pets and Animals

    Disney Pets

    29 ŞUBAT 2012
  • guau . .

    guau . .

    25 Ocak 2008
  • NCIX Tech Tips

    NCIX Tech Ti

    2 Ocak 2007