在ADT上解析readEither

时间:2018-12-06 08:55:22

标签: haskell algebraic-data-types either

你好,我想知道是否给定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的情况下,如何覆盖EitherADT中的两个?实际上2*2   例,统一吗?

我正在考虑在fromRight的每个分支(例如fromRight (D 0))上使用pattern-matching   (在我们的情况下,如果因为只有2种情况),但我不知道这是否是   最好的方法。   但是fromRight返回内部类型。.我想保留Either

有什么想法吗?

1 个答案:

答案 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)