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

  • Anthony Le

    Anthony Le

    10 EKİM 2006
  • hoorahjencar

    hoorahjencar

    6 HAZİRAN 2007
  • sghaff1

    sghaff1

    23 Mart 2009