Итак, у меня есть тип данных
data SomeType a =
Type a |
Mix (SomeType a) (SomeType a)
Это мой экземпляр шоу для SomeType
instance (Show a) => Show (SomeType a) where
show (Type a) = show a
show (Mix a b) = "(" ++ show a ++ " " ++ show b ++ ")"
So
Mix (Type 5) (Type 4)
дал бы мне
(5 4)
Теперь я хочу иметь
read "(3 4)" :: SomeType Int
производить
(3 4)
or
read "(a b)" :: SomeType Char
производить
(a b)
Я не понимаю, как использовать класс Read.
SomeType Char
- это не то, что сгенерировало быshow (Mix (Type 'a') (Type 'b'))
. - person hvr   schedule 21.10.2011deriving (Show, Read)
после описания типа. Хотя они не будут производить ваши выходные и вводные данные, они являются стандартным способом отображения (а иногда и чтения) значений, поэтому вы должны использовать их вместо своих собственных экземпляров. Если вы хотите показать их по-другому, используйте отдельную функцию и назовите ееrender
или около того. - person bzn   schedule 21.10.2011