So habe ich den folgenden Code:dequeue Funktion aus einer Liste in Haskell
module Queue where
class Queue t
where
enqueue :: t a -> a -> t a
dequeue :: t a -> Maybe (t a, a)
--und:
module DataQueue where
import Queue
data DQueue a = Empty | Enqueue a (DQueue a)
deriving (Eq, Show, Read)
instance Queue DQueue
where
enqueue (Empty) s = Enqueue s (Empty)
enqueue (Enqueue v ss) s = Enqueue s (Enqueue v ss)
dequeue Empty = Nothing
dequeue (Enqueue a (ss)) = Just(ss)
ich ein Element einer Liste (Enqueue) hinzufügen, der gut arbeitet. Außerdem entferne ich ein Element der Liste mit der Auszugsfunktion. Irgendwie bekomme ich einen Fehler für die letzte Zeile meiner Auszugsfunktion. Es sagt:
"Couldn't match expected type
(DQueue a, a)
with actual typeDQueue a
"
Ich verstehe wirklich nicht, wie man dieses Problem löst.
Normalerweise denken wir an Warteschlangenauflösungs von vorne nehmen, ausgedrückt durch eine Art Signatur wie 'dequeue :: ta -> Vielleicht (a, ta) '. Unrelated: Multi-Parameter-Klassen und funktionale Abhängigkeiten bieten einen etwas schöneren Ausdruck. 'Klasse Warteschlange el q | q -> el wo {enqueue :: q -> el -> q; entscheiden :: q -> Vielleicht (el, q)} '. Dies ermöglicht, dass monomorphe (z. B. nicht gepackte) Warteschlangen die Klasse instanziieren. – dfeuer