2016-03-24 11 views
0

Ich bin neu mit Haskell. Ich habe neue Typen:Ein neuer Datentyp Element Zugriff in Haskell

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

und

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

und in einer neuen Funktion, die ich den richtigen Namen eines Benutzers zugreifen möchten;

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

Wie kann ich es tun, ich versuchte viele Möglichkeiten, aber hat nicht funktioniert.

Antwort

5

Verwenden Sie einfach Mustervergleich:

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

Sie auch nicht verwendeten Variablen mit _ zu unterdrücken Warnungen Präfix interessiert sein könnte.

accreal:: User -> RealName 
accreal (User _un rn _uns _ps) = rn 

Sie können auch einfach _ verwenden, um einen Wert zu verwerfen, z. accreal (User _ rn _ _) = rn.

Alternativ Ihre data Typ in einen Datensatz ändern:

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

Dies definiert automatisch einen Vorsprung real :: User -> RealName für Sie.

+0

Gibt es einen anderen Weg ohne Mustererkennung –

+0

@YavuzSelimKartal Siehe die Bearbeitung. – chi

Verwandte Themen