Wenn ich eine Suche nach einem Problembereich durchführen wollte und verschiedene Zustände verfolgen wollte, die ein Knoten bereits besucht hat, I several options to do it depending on the constraints of those states. Jedoch; Gibt es eine Möglichkeit, eine Funktion oder eine andere zu senden, abhängig von der Einschränkung der Zustände, die der Benutzer als Eingabe verwendet? wenn ich zum Beispiel:Haskell typeclasses in einer Funktion überprüfen
data Node a = Node { state :: a, cost :: Double }
Und ich wollte auf einem Problem a
eine Suche durchzuführen, ist es eine Möglichkeit, ich überprüfen könnte, wenn a
Eq
ist, Ord
oder Hashable
und dann eine andere Art der Suche nennen? In Pseudo-Code, so etwas wie:
search :: Eq a => Problem a -> Node a
search [email protected](... initial ...) -- Where initial is a State of type a
| (Hashable initial) = searchHash problem
| (Ord initial) = searchOrd problem
| otherwise = searchEq problem
bin mir bewusst, dass ich nur der Benutzer eine search
oder eine andere, je nach dem eigenen Gebrauch wählen lassen könnte; aber in der Lage zu sein, etwas zu tun, könnte für mich sehr praktisch sein, da die Suche nicht wirklich einer der Benutzerendpunkte als solcher ist (ein Beispiel könnte eine Funktion bfs
sein, die search
mit einigen Parametern anruft, damit sie sich wie ein Breitester verhält Suche).
Alle Typinformationen werden während der Kompilierung gelöscht: Zur Laufzeit werden Werte nicht im Speicher mit ihren Typen markiert, noch wird eine Darstellung aller Typklasseninstanzen angezeigt. Dies macht solche Überprüfungen unmöglich. Wenn diese Information benötigt wird, muss der Programmierer explizit darum bitten, sie herum zu halten, z. wie Daniel Wagner unten mit einer benutzerdefinierten Klasse. – chi