将一个Read实例添加到Path to Path包中

时间:2018-02-26 23:08:51

标签: haskell parsec

我喜欢Path包并经常使用它。对我来说主要的不便是没有Path的Read实例。很明显,人们需要4个不同的实例,比如

instance Read (Path Rel File) where
instance Read (Path Rel Dir) where
instance Read (Path Abs Dir) where
instance Read (Path Abs File) where

但是我看不出如何定义readsPrec函数。它需要一个文件路径的解析器函数。 我想有人已经为文件路径编写了一个解析器,我知道必须考虑很多特殊情况。我找不到这样的功能。我应该在哪里看?

1 个答案:

答案 0 :(得分:0)

我利用了这个事实,即Path的show函数产生一个String

instance Show (Path b t) where
  show = show . toFilePath

因此,read可以先读取字符串,然后分析字符串:

instance Read (Path Abs Dir) where
   readsPrec i r =   
        maybe []  (\res -> [(Path res, rem1)] ) $ Path.parseAbsDir x
        where  [(x ::String , rem1)] = readsPrec i r

我不太喜欢这种方法,并且首选解析器的文件路径不依赖于值周围的“..”。

有关如何改进的建议吗?