{-# language LambdaCase #-} data Choice = ChoiceA | ChoiceB | ChoiceC | ChoiceD deriving Show choiceToString = \case ChoiceA -> "string for A" ChoiceB -> "string for B" ChoiceC -> "string for C" ChoiceD -> "string for D" stringToChoice = \case "string for A" -> Right ChoiceA "string for B" -> Right ChoiceB "string for C" -> Right ChoiceC "string for D" -> Right ChoiceD unknown -> Left unknown main = do print . stringToChoice $ choiceToString ChoiceA