我正在尝试使用GHC核心数据类型。
我能够将我的Haskell源代码编译为类型为Bind CoreBndr
的核心表示。
我们知道此数据类型没有默认的Show
实例。
有一种方法可以很好地打印这种表示,但它有太多与之相关的噪音。
我想将GHC核心视为任何其他代数数据类型并用它来编写函数。
如果我们有一个Show
GHC核心实例会更容易。
有没有人写过我可以重用的节目实例?
除此之外,社区如何编写和验证处理GHC核心的程序?
答案 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在其许多数据类型中都有递归。例如,在TyCon,AlgTyConRhs和DataCon之间我们有:
Show
有TyCon
,其中包含AlgTyCon
。
AlgTyConRhs
包含AlgTyConRhs
作为其记录字段之一。
data_cons :: [DataCon]
包含DataCon
作为其中一个字段。
因此我们走了一圈。由于dcRepTyCon :: TyCon
如何工作,如果您尝试打印它,这样的递归将创建无限输出。
为了获得带有数据构造函数和所有内容的“漂亮”自定义表示,您必须自己编写它。这实际上有些挑战,因为您必须考虑并调试这样的递归情况,默认漂亮的打印机已经解决了。
这很繁琐,许多标签都被打开了,但这是一个很好的学习经历:)