Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell 使用bool列表压缩AST_Haskell_Uniplate - Fatal编程技术网

Haskell 使用bool列表压缩AST

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

我有一个表示haskell程序和一个按顺序表示s上存在严格注释的位向量/bool列表。例如,
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
是一种模式。下次要更明确地说明你想要什么。非常感谢你,我没想到会有这样一个完整的答案。我一开始工作就接受。非常感谢,我没想到会有这样完整的答案。我一开始工作就接受。非常感谢,我没想到会有这样完整的答案。我一开始工作就接受。非常感谢,我没想到会有这样完整的答案。我一开始工作就接受。