Ich habe die nächsten Strukturen:Allgemein Typ in einer Liste von Funktionen
data BasicTypes = TypeS String
| TypeI Integer
deriving (Show, Ord, Eq)
data MRF = MRF {
lastValue :: BasicTypes,
requestedFilters :: [RF]
} deriving (Show)
data RF = RF {
event :: String,
filters :: [Filter]
} deriving (Show)
type BooleanFunction a = a -> Bool
data Filter = Filter {
operation :: BooleanFunction BasicTypes,
value :: BasicTypes
} deriving (Show)
ich ein MRF Daten haben wollen, die eine Liste von requestedFilters (RF) enthält. Jede RF hat Filter, und diese Filter können vom Typ String oder Integer sein.
Die Sache ist, dass die Filter dynamisch erstellt werden und kann entweder über einen String oder ein Integer-Wert sein, so konnten wir haben:
Filter1 = Filter {operation = (==) 5, value = 3}
Filter2 = Filter {operation = (==) "hello", value = "hello"}
Und beide Filter in der gleichen MRF aufgenommen worden!
Ich mag die BasicTypes Daten zu vermeiden, und eine generische Art setzen, aber wenn ein Put operation :: a -> Bool
dann alle Filter vom gleichen Typ sein sollten (so kann ich nicht Dinge wie Integer -> Bool
und String -> Bool
zusammen in der gleichen Liste).
Was schlagen Sie vor? Vielen Dank!
PS: Ich habe bereits mit dem Typ TypeRep versucht, aber ich konnte keine Lösung für dieses
Und was passiert, wenn 'Filter1' auf einen String oder' Filter2' auf einen Integer angewendet wird? Es macht keinen Sinn, eine heterogene Liste von Filtern zu haben. –