我喜欢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
函数。它需要一个文件路径的解析器函数。
我想有人已经为文件路径编写了一个解析器,我知道必须考虑很多特殊情况。我找不到这样的功能。我应该在哪里看?
答案 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
我不太喜欢这种方法,并且首选解析器的文件路径不依赖于值周围的“..”。
有关如何改进的建议吗?