GHC核心的{Show`实例

时间:2017-02-20 10:31:19

标签: haskell ghc

我正在尝试使用GHC核心数据类型。 我能够将我的Haskell源代码编译为类型为Bind CoreBndr的核心表示。 我们知道此数据类型没有默认的Show实例。 有一种方法可以很好地打印这种表示,但它有太多与之相关的噪音。 我想将GHC核心视为任何其他代数数据类型并用它来编写函数。 如果我们有一个Show GHC核心实例会更容易。 有没有人写过我可以重用的节目实例?

除此之外,社区如何编写和验证处理GHC核心的程序?

1 个答案:

答案 0 :(得分:1)

在GHC中进行了垃圾箱潜水并思考了同样的问题,我可以自信地说GHC中library(shiny) library(shinydashboard) library(DT) ui <- dashboardPage( dashboardHeader(title = "Data Table Example"), dashboardSidebar( sidebarMenu( menuItem('Tabs', tabName='tabs', menuSubItem('Tab 1', tabName='tab1'), menuSubItem('Tab 2', tabName='tab2') ) ) ), dashboardBody( tabItems( tabItem(tabName='tab1', actionButton("import","Import"), br(), tags$div(tags$h3(tags$b(" Get Selected Row Values",align="middle",style="color: rgb(57,156,8)"))), br(), DT::dataTableOutput('ProductDataTable') ), tabItem(tabName='tab2', actionButton("display","Display"), uiOutput('info') ) ) ) ) server <- function(input, output) { Product <- reactive({ if(input$import == 0) { return() } isolate({ input$import data <- mtcars # Here read Your data: read.csv2("RulesData.csv", header=TRUE, sep=";") }) }) output$ProductDataTable <- DT::renderDataTable({ DT::datatable(Product(),selection = "single", extensions = c('Buttons', 'ColReorder', 'FixedHeader', 'Scroller'), rownames=FALSE, options=list(dom = 'Bfrtip', searching = T, pageLength = 25, searchHighlight = TRUE, colReorder = TRUE, fixedHeader = TRUE, filter = 'bottom', buttons = c('copy', 'csv','excel', 'print'), paging = TRUE, deferRender = TRUE, scroller = TRUE, scrollX = TRUE, scrollY = 700 )) }) observeEvent(input$display,{ output$info <- renderPrint({ row_count <- input$ProductDataTable_rows_selected data <- Product()[row_count, ] cat('Row Selected: ') cat(data[,1]) #display the selected row 1st col value }) }) } shinyApp(ui, server) 的天真实施你想要什么。这是因为内部GHC在其许多数据类型中都有递归。例如,在TyConAlgTyConRhsDataCon之间我们有:

ShowTyCon,其中包含AlgTyCon

AlgTyConRhs包含AlgTyConRhs作为其记录字段之一。

data_cons :: [DataCon]包含DataCon作为其中一个字段。

因此我们走了一圈。由于dcRepTyCon :: TyCon如何工作,如果您尝试打印它,这样的递归将创建无限输出。

为了获得带有数据构造函数和所有内容的“漂亮”自定义表示,您必须自己编写它。这实际上有些挑战,因为您必须考虑并调试这样的递归情况,默认漂亮的打印机已经解决了。

这很繁琐,许多标签都被打开了,但这是一个很好的学习经历:)