SORU
22 HAZİRAN 2010, Salı


Nasıl GHCi kullanırken işlevler için açık tür bildirimleri sağlamak için?

Nasıl ben bu işlevi eşdeğer tanımlamak için (learnyouahaskell alınan) içinde GHCi?

import Data.List  

numUniques :: (Eq a) => [a] -> Int  
numUniques = length . nub  

Tip bildirimi olmadan, GHCi fonksiyon tanımını kabul eder, ama hiçbir işe yaramayan bir tür ile sona erer

Prelude Data.List> import Data.List 
Prelude Data.List> let numUniques' = length . nub
Prelude Data.List> :t numUniques'
numUniques' :: [()] -> Int

Elde edilen fonksiyonu sadece bir parametre olarak birimler listesini kabul eder.

Bir şekilde orada GHCi yazın tanımlamalar sağlamak. Yoksa tür bildirimleri gerektirmeyen bu gibi fonksiyonları tanımlamak için başka bir yol var mı?

GHCi Kılavuzu'nda belirgin bir ipucu gördüm, ve aşağıdaki gibi ifadeler ile (boşuna) tecrübe:

> let numUniques' = ((length . nub) :: (Eq a) => [a] -> Int)
> :t numUniques'
numUniques' :: [()] -> Int

CEVAP
22 HAZİRAN 2010, Salı


Bir şekilde orada GHCi yazın tanımlamalar sağlamak.

let numUniques' :: (Eq a) => [a] -> Int; numUniques' = length . nub

Yoksa tür bildirimleri gerektirmeyen bu gibi fonksiyonları tanımlamak için başka bir yol var mı?

Kapalı -XNoMonomorphismRestriction ile monomorphism kısıtlama açarsanız sağ türünü anlaması olacaktır.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • kylediablo

    kylediablo

    8 Ocak 2007
  • MandMEvangelists

    MandMEvangel

    28 Ocak 2008
  • Max Lee

    Max Lee

    18 AĞUSTOS 2006