wvogel日記

自分用の技術備忘録が多めです.

Queue

というわけで
帰宅して、夕食を食べたので、さきほどのをそのまんま流用し、Queueを書いてみた

data Queue a = Empty | Value a (Queue a) deriving Show

fqueue :: Queue String -> String -> Queue String
fqueue queue str = case str of
    "dequeue" -> dequeue queue
    otherwise -> enqueue queue str

enqueue :: Queue a -> a -> Queue a
enqueue queue str = case queue of
    Empty -> Value str Empty
    otherwise -> Value str queue
    
dequeue :: Queue a-> Queue a
dequeue queue = case queue of
    Empty -> Empty
    Value a Empty -> Empty
    Value a next -> Value a $ dequeue next

main関数は省略。