Böyle rekor desenleri kullanabilirsiniz:
data X = A | B {name :: String} | C {x::Int, y::Int, name::String}
myfn :: X -> Int
myfn A = 50
myfn B{} = 200
myfn C{} = 500
Kayıt desenleri inşaatçı alanlara isim vermek için izin verir. Böylece sadece ihtiyacınız belirli bir alan üzerinde desen maçı can görebilirsiniz
myfn C{name=n} = length n
: da benzeri şeyler yapabilirsiniz.
Not: bile rekor sözdizimi kullanmayın veri türleri ile boş kayıt deseni kullanabilirsiniz:
data A = A Int | B Int Int
myfn A{} = 1
myfn B{} = 2
Bu gayet iyi. Orada rekor desenleri ile ilgili diğer uzantıları bir dizi: tüm alanları eşleşir ve artık birlikte kapsam x
var yani C{x=x, y=y, name=name}
:
rekor kalıpları kullanarak bir pozisyonel bir şekilde kurucular kullanmanızı engellemez unutmayın, bu yüzden hala yazabilirsiniz: Sadece işlevselliği ekler
myfn (B _) = 200
.
Harika, teşekkürler. Aslında C {_} ve C {..} 'yi boşa çıkardım. Sadece bir karakter çok fazla. ^^ – theduke
Google'ın "haskell kayıt kalıbı" ile size pek yardımcı olmadığı konusunda utanç verin. Soruyu yeniden adlandırdım, belki bu başkaları için daha keşfedilebilir hale getirebilir. – theduke
@theduke: Ayrıca, B 'nin normal, kayıt dışı bir veri türü olduğunu bildirmiş olsanız bile boş kayıt modelini (' B {} ') kullanabileceğinizi de unutmayın. – Lii