author | haftmann |
Tue, 29 Jun 2010 11:25:03 +0200 | |
changeset 37610 | 1b09880d9734 |
parent 37428 | b3d94253e7f2 |
child 39068 | 5ac590e8b320 |
permissions | -rw-r--r-- |
{-# OPTIONS_GHC -fglasgow-exts #-} module Example where { data Queue a = AQueue [a] [a]; empty :: forall a. Queue a; empty = AQueue [] []; dequeue :: forall a. Queue a -> (Maybe a, Queue a); dequeue (AQueue [] []) = (Nothing, AQueue [] []); dequeue (AQueue xs (y : ys)) = (Just y, AQueue xs ys); dequeue (AQueue (v : va) []) = let { (y : ys) = reverse (v : va); } in (Just y, AQueue [] ys); enqueue :: forall a. a -> Queue a -> Queue a; enqueue x (AQueue xs ys) = AQueue (x : xs) ys; }