GADT's - Anwendungen und Nützlichkeit?
Ich beschreibe GADTs mit learnyouahaskell und interessiere mich für deren Einsatzmöglichkeiten. Ich verstehe, dass ihr Hauptmerkmal das explizite Setzen von Schriftarten ist.
Sowie
data Users a where
GetUserName :: Int -> Users String
GetUserId :: String -> Users Int
usersFunction :: Users a -> a
usersFunction (GetUserName id)
| id == 100 = "Bob"
| id == 200 = "Phil"
| otherwise = "No corresponding user"
usersFunction (GetUserId name)
| name == "Bob" = 100
| name == "Phil" = 200
| otherwise = 0
main = do
print $ usersFunction (GetUserName 100)
Was sind die anderen Verwendungsmöglichkeiten von GADTs, abgesehen von der zusätzlichen Typensicherheit beim Arbeiten mit diesen Datentypen?