data Action a = Login UserID | Logout | StartGame Game UserID | GameAction a | GameOver Status | Error Status main1 = toString (Login "asd") class Serializable a where toString :: a -> String fromString :: String -> a instance Serializable a => Serializable (Action a) where toString (Login user) = "Login,(" ++ user ++ ")" etc....