2016-03-24 41 views
0

'da yeni bir veri tipi eleman erişimi haskell ile yeni. Yeni türleri vardır:Haskell

type RealName = String 
type UserName = String 
type GroupName = String 
type Message = String 

ve

data User = User UserName RealName [UserName] [Post] 

ve ben bir kullanıcının gerçek adını erişmek istediğiniz yeni işlevinde;

accreal :: User -> RealName 
accreal us = ?? 

Bunu nasıl yapabilirim, birçok yolu denedim ama çalışmadım. Ayrıca uyarıları bastırmak için _ ile kullanılmayan değişkenleri önüne isteyebilirsiniz

accreal:: User -> RealName 
accreal (User un rn uns ps) = rn 

:

cevap

5

Sadece desen eşleştirme kullanmaktır.

accreal:: User -> RealName 
accreal (User _un rn _uns _ps) = rn 
Ayrıca sadece, örneğin bir değer atmak _ kullanabilirsiniz

accreal (User _ rn _ _) = rn.

Alternatif olarak, bir kayıt içine data türünü değiştirmek:

data User = User 
    { user :: UserName 
    , real :: RealName 
    , others :: [UserName] 
    , posts :: [Post] } 

Bu sizin için otomatik bir projeksiyon real :: User -> RealName tanımlar.

+0

Desen eşleştirmesi kullanmadan başka bir yol var mı –

+0

@YavuzSelimKartal Düzenleme konusuna bakın. – chi