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

  • jonathepianist

    jonathepiani

    31 Temmuz 2008
  • lifeisforsharingDT

    lifeisforsha

    18 Mayıs 2011
  • LiveForGodsKingdom

    LiveForGodsK

    6 NİSAN 2008