gpt4 book ai didi

haskell - 计算模块中的 `Pat` s

转载 作者:行者123 更新时间:2023-12-02 10:08:32 24 4
gpt4 key购买 nike

我需要计算Pat的数量在 haskell 中 Module 。我知道最简单的方法是在 AST 的每个级别上进行模式匹配,这将产生一个看起来像整个 AST 的巨大函数。我相信有某种方法可以利用像 Functor 或 State Monad 这样的类型类来依赖一些遍历树的现有函数(例如 PrettyPrint) )并跟踪计数器,但我不确定它到底是如何工作的。

最佳答案

使用 uniplate 非常简单:

import Data.Data
import Data.Generics.Uniplate.Data
import Control.Monad
import Language.Haskell.Exts

findPats :: Data a => a -> [Pat]
findPats = universeBi

test = do
content <- readFile "Simple.hs"
case parseModule content of
ParseFailed _ e -> error e
ParseOk a -> do
forM_ (findPats a) $ \p -> do
putStrLn $ "got a pat: " ++ show p

本质上它只是 universeBi 函数。

关于haskell - 计算模块中的 `Pat` s,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31775131/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com