Haskell 使用bool列表压缩AST
我有一个表示haskell程序和一个按顺序表示s上存在严格注释的位向量/bool列表。例如,Haskell 使用bool列表压缩AST,haskell,uniplate,Haskell,Uniplate,我有一个表示haskell程序和一个按顺序表示s上存在严格注释的位向量/bool列表。例如,1000表示有4个Pats的程序,其中第一个是BangPat。是否有任何方法可以根据列表打开和关闭AST中的注释 --编辑:进一步澄清我想做什么 根据user5042的回答: Simple.hs:= main = do case args of [] -> error "blah" [!x] -> putStrLn "one" (!x : xs) -> put
1000
表示有4个Pat
s的程序,其中第一个是BangPat
。是否有任何方法可以根据列表打开和关闭AST
中的注释
--编辑:进一步澄清我想做什么
根据user5042的回答:
Simple.hs:=
main = do
case args of
[] -> error "blah"
[!x] -> putStrLn "one"
(!x : xs) -> putStrLn "many"
我想要editBang“Simple.hs”[真的,真的,真的,真的]
生成
main = do
case args of
[] -> error "blah"
[!x] -> putStrLn "one"
(!(!x : !xs)) -> putStrLn "many"
鉴于上述情况,只有4个地方
代码>可以作为第一步出现,下面介绍如何使用transformBi
:
import Data.Data
import Control.Monad
import Data.Generics.Uniplate.Data
import Language.Haskell.Exts
import Text.Show.Pretty (ppShow)
changeNames x = transformBi change x
where change (Ident str) = Ident ("foo_" ++ str)
change x = x
test2 = do
content <- readFile "Simple.hs"
case parseModule content of
ParseFailed _ e -> error e
ParseOk a -> do
let a' = changeNames a
putStrLn $ ppShow a'
您还可以考虑使用重写BIM
文件Simple.hs
:
main = do
case args of
[] -> error "blah"
[!x] -> putStrLn "one"
(!x : xs) -> putStrLn "many"
作为第一步,下面介绍如何使用transformBi
:
import Data.Data
import Control.Monad
import Data.Generics.Uniplate.Data
import Language.Haskell.Exts
import Text.Show.Pretty (ppShow)
changeNames x = transformBi change x
where change (Ident str) = Ident ("foo_" ++ str)
change x = x
test2 = do
content <- readFile "Simple.hs"
case parseModule content of
ParseFailed _ e -> error e
ParseOk a -> do
let a' = changeNames a
putStrLn $ ppShow a'
您还可以考虑使用重写BIM
文件Simple.hs
:
main = do
case args of
[] -> error "blah"
[!x] -> putStrLn "one"
(!x : xs) -> putStrLn "many"
作为第一步,下面介绍如何使用transformBi
:
import Data.Data
import Control.Monad
import Data.Generics.Uniplate.Data
import Language.Haskell.Exts
import Text.Show.Pretty (ppShow)
changeNames x = transformBi change x
where change (Ident str) = Ident ("foo_" ++ str)
change x = x
test2 = do
content <- readFile "Simple.hs"
case parseModule content of
ParseFailed _ e -> error e
ParseOk a -> do
let a' = changeNames a
putStrLn $ ppShow a'
您还可以考虑使用重写BIM
文件Simple.hs
:
main = do
case args of
[] -> error "blah"
[!x] -> putStrLn "one"
(!x : xs) -> putStrLn "many"
作为第一步,下面介绍如何使用transformBi
:
import Data.Data
import Control.Monad
import Data.Generics.Uniplate.Data
import Language.Haskell.Exts
import Text.Show.Pretty (ppShow)
changeNames x = transformBi change x
where change (Ident str) = Ident ("foo_" ++ str)
change x = x
test2 = do
content <- readFile "Simple.hs"
case parseModule content of
ParseFailed _ e -> error e
ParseOk a -> do
let a' = changeNames a
putStrLn $ ppShow a'
您还可以考虑使用重写BIM
文件Simple.hs
:
main = do
case args of
[] -> error "blah"
[!x] -> putStrLn "one"
(!x : xs) -> putStrLn "many"
答案更新为工作示例。请注意!不允许使用xs
。由于刘海可以出现在许多你没有考虑的地方,例如,,所以你的工作已经完成了![]
和![!x]
,但它们不允许出现在顶级定义中,例如!main=…
是不允许的,即使main
是一种模式。下次要更明确地说明你想要什么。答案用工作示例更新。注意!不允许使用xs
。由于刘海可以出现在许多你没有考虑的地方,例如,,所以你的工作已经完成了![]
和![!x]
,但它们不允许出现在顶级定义中,例如!main=…
是不允许的,即使main
是一种模式。下次要更明确地说明你想要什么。答案用工作示例更新。注意!不允许使用xs
。由于刘海可以出现在许多你没有考虑的地方,例如,,所以你的工作已经完成了![]
和![!x]
,但它们不允许出现在顶级定义中,例如!main=…
是不允许的,即使main
是一种模式。下次要更明确地说明你想要什么。答案用工作示例更新。注意!不允许使用xs
。由于刘海可以出现在许多你没有考虑的地方,例如,,所以你的工作已经完成了![]
和![!x]
,但它们不允许出现在顶级定义中,例如!main=…
是不允许的,即使main
是一种模式。下次要更明确地说明你想要什么。非常感谢你,我没想到会有这样一个完整的答案。我一开始工作就接受。非常感谢,我没想到会有这样完整的答案。我一开始工作就接受。非常感谢,我没想到会有这样完整的答案。我一开始工作就接受。非常感谢,我没想到会有这样完整的答案。我一开始工作就接受。