你好,我想知道是否给定Algebraic Data Type
我该如何解决以下问题:
u::Text->String
u =Data.Text.unpack
data Numeric=I Int | D Double
readNumeric::Text->Either String Numeric
readNumeric text=let str=u text in
if '.' `elem` str then
D (readEither str::Either String Double)
else
I (readEither str::Either String Int)
在给定sides
的情况下,如何覆盖Either
和ADT
中的两个?实际上2*2
例,统一吗?
我正在考虑在fromRight
的每个分支(例如fromRight (D 0)
)上使用pattern-matching
(在我们的情况下,如果因为只有2种情况),但我不知道这是否是
最好的方法。
但是fromRight
返回内部类型。.我想保留Either
有什么想法吗?
答案 0 :(得分:2)
这不是您所需要的吗?
readNumeric::Text -> Either String Numeric
readNumeric text=let str = u text in
if '.' `elem` str then
fmap D (readEither str::Either String Double)
else
fmap I (readEither str::Either String Int)