{"@context":{"@vocab":"https://cir.nii.ac.jp/schema/1.0/","rdfs":"http://www.w3.org/2000/01/rdf-schema#","dc":"http://purl.org/dc/elements/1.1/","dcterms":"http://purl.org/dc/terms/","foaf":"http://xmlns.com/foaf/0.1/","prism":"http://prismstandard.org/namespaces/basic/2.0/","cinii":"http://ci.nii.ac.jp/ns/1.0/","datacite":"https://schema.datacite.org/meta/kernel-4/","ndl":"http://ndl.go.jp/dcndl/terms/","jpcoar":"https://github.com/JPCOAR/schema/blob/master/2.0/"},"@id":"https://cir.nii.ac.jp/crid/1360848657423144192.json","@type":"Article","productIdentifier":[{"identifier":{"@type":"DOI","@value":"10.1016/j.scico.2012.07.014"}},{"identifier":{"@type":"URI","@value":"https://api.elsevier.com/content/article/PII:S0167642312001426?httpAccept=text/xml"}},{"identifier":{"@type":"URI","@value":"https://api.elsevier.com/content/article/PII:S0167642312001426?httpAccept=text/plain"}},{"identifier":{"@type":"HANDLE","@value":"1983/93d34fc0-6b88-454f-bfb5-c1aa32b6f1d7"}}],"resourceType":"学術雑誌論文(journal article)","dc:title":[{"@value":"Refactoring pattern matching"}],"description":[{"notation":[{"@value":"Defining functions by pattern matching over the arguments is advantageous for understanding and reasoning, but it tends to expose the implementation of a datatype. Significant effort has been invested in tackling this loss of modularity; however, decoupling patterns from concrete representations while maintaining soundness of reasoning has been a challenge. Inspired by the development of invertible programming, we propose an approach to program refactoring based on a right-invertible language rinv—every function has a right (or pre-) inverse. We show how this new design is able to permit a smooth incremental transition from programs with algebraic datatypes and pattern matching, to ones with proper encapsulation, while maintaining simple and sound reasoning."}]}],"creator":[{"@id":"https://cir.nii.ac.jp/crid/1380848657423144194","@type":"Researcher","foaf:name":[{"@value":"Meng Wang"}]},{"@id":"https://cir.nii.ac.jp/crid/1380848657423144195","@type":"Researcher","foaf:name":[{"@value":"Jeremy Gibbons"}]},{"@id":"https://cir.nii.ac.jp/crid/1420845751136516352","@type":"Researcher","personIdentifier":[{"@type":"KAKEN_RESEARCHERS","@value":"10583627"},{"@type":"NRID","@value":"1000010583627"},{"@type":"NRID","@value":"9000004379999"},{"@type":"NRID","@value":"9000311511776"},{"@type":"NRID","@value":"9000274312191"},{"@type":"NRID","@value":"9000283468442"},{"@type":"NRID","@value":"9000386211958"},{"@type":"NRID","@value":"9000287142618"},{"@type":"NRID","@value":"9000283722486"},{"@type":"NRID","@value":"9000018988447"},{"@type":"NRID","@value":"9000347093931"},{"@type":"NRID","@value":"9000305624777"},{"@type":"NRID","@value":"9000411660252"},{"@type":"NRID","@value":"9000404671162"},{"@type":"RESEARCHMAP","@value":"https://researchmap.jp/7000000397"}],"foaf:name":[{"@value":"Kazutaka Matsuda"}]},{"@id":"https://cir.nii.ac.jp/crid/1420282801187054720","@type":"Researcher","personIdentifier":[{"@type":"KAKEN_RESEARCHERS","@value":"50292769"},{"@type":"NRID","@value":"1000050292769"},{"@type":"NRID","@value":"9000287167364"},{"@type":"NRID","@value":"9000406031901"},{"@type":"NRID","@value":"9000404844285"},{"@type":"NRID","@value":"9000304612370"},{"@type":"NRID","@value":"9000404844756"},{"@type":"NRID","@value":"9000404844275"},{"@type":"NRID","@value":"9000243892485"},{"@type":"NRID","@value":"9000408780297"},{"@type":"NRID","@value":"9000406298777"},{"@type":"NRID","@value":"9000304612418"},{"@type":"NRID","@value":"9000348891243"},{"@type":"NRID","@value":"9000406031453"},{"@type":"NRID","@value":"9000242254100"},{"@type":"NRID","@value":"9000406312947"},{"@type":"NRID","@value":"9000408423516"},{"@type":"NRID","@value":"9000404670888"},{"@type":"NRID","@value":"9000382644229"},{"@type":"NRID","@value":"9000391780399"},{"@type":"NRID","@value":"9000341528215"},{"@type":"NRID","@value":"9000408423579"},{"@type":"NRID","@value":"9000404220592"},{"@type":"NRID","@value":"9000347541242"},{"@type":"NRID","@value":"9000021446392"},{"@type":"NRID","@value":"9000021581624"},{"@type":"NRID","@value":"9000346936913"},{"@type":"NRID","@value":"9000404942799"},{"@type":"NRID","@value":"9000242117311"},{"@type":"NRID","@value":"9000391780291"},{"@type":"NRID","@value":"9000408420493"},{"@type":"NRID","@value":"9000305624449"},{"@type":"NRID","@value":"9000341527457"},{"@type":"NRID","@value":"9000348890236"},{"@type":"NRID","@value":"9000242254139"},{"@type":"NRID","@value":"9000408423570"},{"@type":"NRID","@value":"9000345299200"},{"@type":"NRID","@value":"9000063027136"},{"@type":"NRID","@value":"9000398792784"},{"@type":"NRID","@value":"9000304614056"},{"@type":"NRID","@value":"9000347541261"},{"@type":"NRID","@value":"9000243887191"},{"@type":"NRID","@value":"9000406031891"},{"@type":"NRID","@value":"9000406313463"},{"@type":"NRID","@value":"9000404671159"},{"@type":"RESEARCHMAP","@value":"https://researchmap.jp/zhenjiang_hu"}],"foaf:name":[{"@value":"Zhenjiang Hu"}]}],"publication":{"publicationIdentifier":[{"@type":"PISSN","@value":"01676423"}],"prism:publicationName":[{"@value":"Science of Computer Programming"}],"dc:publisher":[{"@value":"Elsevier BV"}],"prism:publicationDate":"2013-11","prism:volume":"78","prism:number":"11","prism:startingPage":"2216","prism:endingPage":"2242"},"reviewed":"false","dcterms:accessRights":"http://purl.org/coar/access_right/c_abf2","dc:rights":["https://www.elsevier.com/tdm/userlicense/1.0/","https://www.elsevier.com/open-access/userlicense/1.0/"],"url":[{"@id":"https://api.elsevier.com/content/article/PII:S0167642312001426?httpAccept=text/xml"},{"@id":"https://api.elsevier.com/content/article/PII:S0167642312001426?httpAccept=text/plain"}],"createdAt":"2012-08-24","modifiedAt":"2018-11-21","foaf:topic":[{"@id":"https://cir.nii.ac.jp/all?q=QA75","dc:title":"QA75"},{"@id":"https://cir.nii.ac.jp/all?q=Refactoring","dc:title":"Refactoring"},{"@id":"https://cir.nii.ac.jp/all?q=/dk/atira/pure/core/keywords/programming_languages","dc:title":"/dk/atira/pure/core/keywords/programming_languages"},{"@id":"https://cir.nii.ac.jp/all?q=Invertible%20programming","dc:title":"Invertible programming"},{"@id":"https://cir.nii.ac.jp/all?q=QA76","dc:title":"QA76"},{"@id":"https://cir.nii.ac.jp/all?q=Functional%20programming","dc:title":"Functional programming"},{"@id":"https://cir.nii.ac.jp/all?q=Abstract%20datatypes","dc:title":"Abstract datatypes"},{"@id":"https://cir.nii.ac.jp/all?q=Programming%20Languages","dc:title":"Programming Languages"},{"@id":"https://cir.nii.ac.jp/all?q=Pattern%20matching","dc:title":"Pattern matching"},{"@id":"https://cir.nii.ac.jp/all?q=Fusion","dc:title":"Fusion"}],"project":[{"@id":"https://cir.nii.ac.jp/crid/1040000782106525056","@type":"Project","projectIdentifier":[{"@type":"KAKEN","@value":"22300012"},{"@type":"JGN","@value":"JP22300012"},{"@type":"URI","@value":"https://kaken.nii.ac.jp/grant/KAKENHI-PROJECT-22300012/"}],"notation":[{"@language":"ja","@value":"双方向モデル変換の言語的基盤技術に関する研究"},{"@language":"en","@value":"Study on Language Foundation for Bidirectional Model Transformation"}]}],"relatedProduct":[{"@id":"https://cir.nii.ac.jp/crid/1360002218622653952","@type":"Article","resourceType":"学術雑誌論文(journal article)","relationType":["isReferencedBy"],"jpcoar:relatedTitle":[{"@value":"Applicative bidirectional programming with lenses"}]},{"@id":"https://cir.nii.ac.jp/crid/1360004230595472256","@type":"Article","resourceType":"学術雑誌論文(journal article)","relationType":["isReferencedBy"],"jpcoar:relatedTitle":[{"@value":"HOBiT: Programming Lenses Without Using Lens Combinators"}]},{"@id":"https://cir.nii.ac.jp/crid/1360004233085747712","@type":"Article","resourceType":"学術雑誌論文(journal article)","relationType":["isReferencedBy"],"jpcoar:relatedTitle":[{"@value":"Enhancing semantic bidirectionalization via shape bidirectionalizer plug-ins"}]},{"@id":"https://cir.nii.ac.jp/crid/1360021391885913600","@type":"Article","resourceType":"学術雑誌論文(journal article)","relationType":["isReferencedBy"],"jpcoar:relatedTitle":[{"@value":"Embedding by Unembedding"}]},{"@id":"https://cir.nii.ac.jp/crid/1360285707469751168","@type":"Article","resourceType":"学術雑誌論文(journal article)","relationType":["isReferencedBy"],"jpcoar:relatedTitle":[{"@value":"“Bidirectionalization for free” for monomorphic transformations"}]},{"@id":"https://cir.nii.ac.jp/crid/1360574094354068480","@type":"Article","relationType":["references"],"jpcoar:relatedTitle":[{"@value":"A critique of Abelson and Sussman or why calculating is better than scheming"}]},{"@id":"https://cir.nii.ac.jp/crid/1360574094600298496","@type":"Article","relationType":["references"],"jpcoar:relatedTitle":[{"@value":"The promotion and accumulation strategies in transformational programming"}]},{"@id":"https://cir.nii.ac.jp/crid/1360574095603091328","@type":"Article","relationType":["references"],"jpcoar:relatedTitle":[{"@value":"Semantic subtyping"}]},{"@id":"https://cir.nii.ac.jp/crid/1360588381075471744","@type":"Article","resourceType":"学術雑誌論文(journal article)","relationType":["isReferencedBy"],"jpcoar:relatedTitle":[{"@value":"<scp>Sparcl</scp>: A language for partially invertible computation"}]},{"@id":"https://cir.nii.ac.jp/crid/1360848658015894144","@type":"Article","resourceType":"学術雑誌論文(journal article)","relationType":["isReferencedBy"],"jpcoar:relatedTitle":[{"@value":"Applicative bidirectional programming"}]},{"@id":"https://cir.nii.ac.jp/crid/1360855568864647424","@type":"Article","relationType":["references"],"jpcoar:relatedTitle":[{"@value":"Program development by stepwise refinement"}]},{"@id":"https://cir.nii.ac.jp/crid/1360855570232574336","@type":"Article","relationType":["references"],"jpcoar:relatedTitle":[{"@value":"The pattern calculus"}]},{"@id":"https://cir.nii.ac.jp/crid/1361137044420189568","@type":"Article","relationType":["references"],"jpcoar:relatedTitle":[{"@value":"The narrowing-driven approach to functional logic program specialization"}]},{"@id":"https://cir.nii.ac.jp/crid/1361699996082804352","@type":"Article","relationType":["references"],"jpcoar:relatedTitle":[{"@value":"Paramorphisms"}]},{"@id":"https://cir.nii.ac.jp/crid/1361981468532038656","@type":"Article","relationType":["references"],"jpcoar:relatedTitle":[{"@value":"Proof of correctness of data representations"}]},{"@id":"https://cir.nii.ac.jp/crid/1361981468883433728","@type":"Article","relationType":["references"],"jpcoar:relatedTitle":[{"@value":"The universal resolving algorithm and its correctness: inverse computation in a functional language"}]},{"@id":"https://cir.nii.ac.jp/crid/1362544419651393920","@type":"Article","relationType":["references"],"jpcoar:relatedTitle":[{"@value":"Recursive coalgebras from comonads"}]},{"@id":"https://cir.nii.ac.jp/crid/1362825893627304448","@type":"Article","relationType":["references"],"jpcoar:relatedTitle":[{"@value":"Programming with abstract data types"}]},{"@id":"https://cir.nii.ac.jp/crid/1363107368272778368","@type":"Article","relationType":["references"],"jpcoar:relatedTitle":[{"@value":"Pattern matching with abstract data types"}]},{"@id":"https://cir.nii.ac.jp/crid/1363107368391695744","@type":"Article","relationType":["references"],"jpcoar:relatedTitle":[{"@value":"The view from the left"}]},{"@id":"https://cir.nii.ac.jp/crid/1363107370452980096","@type":"Article","relationType":["references"],"jpcoar:relatedTitle":[{"@value":"A positive supercompiler"}]},{"@id":"https://cir.nii.ac.jp/crid/1363388846149083136","@type":"Article","relationType":["references"],"jpcoar:relatedTitle":[{"@value":"An Overview of Edison"}]},{"@id":"https://cir.nii.ac.jp/crid/1363670318472505216","@type":"Article","relationType":["references"],"jpcoar:relatedTitle":[{"@value":"Generalising monads to arrows"}]},{"@id":"https://cir.nii.ac.jp/crid/1363670318610479744","@type":"Article","relationType":["references"],"jpcoar:relatedTitle":[{"@value":"Theory and applications of inverting functions as folds"}]},{"@id":"https://cir.nii.ac.jp/crid/1363670319388370816","@type":"Article","relationType":["references"],"jpcoar:relatedTitle":[{"@value":"A Grammar-Based Approach to Invertible Programs"}]},{"@id":"https://cir.nii.ac.jp/crid/1364233268526934144","@type":"Article","relationType":["references"],"jpcoar:relatedTitle":[{"@value":"Combinators for bidirectional tree transformations"}]},{"@id":"https://cir.nii.ac.jp/crid/1370006919154035712","@type":"Product","relationType":["references"],"jpcoar:relatedTitle":[{"@value":"A short note concerning lazy reduction rules for append"}]},{"@id":"https://cir.nii.ac.jp/crid/1370006919154035713","@type":"Product","relationType":["references"],"jpcoar:relatedTitle":[{"@value":"Template metaprogramming for Haskell"}]},{"@id":"https://cir.nii.ac.jp/crid/1370006919154035714","@type":"Product","relationType":["references"],"jpcoar:relatedTitle":[{"@value":"The size-change principle for program termination"}]},{"@id":"https://cir.nii.ac.jp/crid/1370006919154035716","@type":"Product","relationType":["references"],"jpcoar:relatedTitle":[{"@value":"Pattern guards and transformational patterns"}]},{"@id":"https://cir.nii.ac.jp/crid/1370006919154035717","@type":"Product","relationType":["references"],"jpcoar:relatedTitle":[{"@value":"Views: a way for pattern matching to cohabit with data abstraction"}]},{"@id":"https://cir.nii.ac.jp/crid/1370006919154035718","@type":"Product","relationType":["references"],"jpcoar:relatedTitle":[{"@value":"Algorithmics: towards programming as a mathematical activity"}]},{"@id":"https://cir.nii.ac.jp/crid/1370006919154035719","@type":"Product","relationType":["references"],"jpcoar:relatedTitle":[{"@value":"Bidirectionalization transformation based on automatic derivation of view complement functions"}]},{"@id":"https://cir.nii.ac.jp/crid/1370006919154035721","@type":"Product","relationType":["references"],"jpcoar:relatedTitle":[{"@value":"Gradual refinement: blending pattern matching with data abstraction"}]},{"@id":"https://cir.nii.ac.jp/crid/1370006919154035722","@type":"Product","relationType":["references"],"jpcoar:relatedTitle":[{"@value":"There and back again: arrows for invertible programming"}]},{"@id":"https://cir.nii.ac.jp/crid/1370006919154035723","@type":"Product","relationType":["references"],"jpcoar:relatedTitle":[{"@value":"JMatch: Iterable abstract pattern matching for Java"}]},{"@id":"https://cir.nii.ac.jp/crid/1370006919154035724","@type":"Product","relationType":["references"],"jpcoar:relatedTitle":[{"@value":"Active patterns"}]},{"@id":"https://cir.nii.ac.jp/crid/1370006919154035725","@type":"Product","relationType":["references"],"jpcoar:relatedTitle":[{"@value":"Deforestation: transforming programs to eliminate trees"}]},{"@id":"https://cir.nii.ac.jp/crid/1370006919154035727","@type":"Product","relationType":["references"],"jpcoar:relatedTitle":[{"@value":"Boomerang: resourceful lenses for string data"}]},{"@id":"https://cir.nii.ac.jp/crid/1370006919154035728","@type":"Product","relationType":["references"],"jpcoar:relatedTitle":[{"@value":"Organizing functional code for parallel execution or, foldl and foldr considered slightly harmful"}]},{"@id":"https://cir.nii.ac.jp/crid/1370006919154035841","@type":"Product","relationType":["references"],"jpcoar:relatedTitle":[{"@value":"Termination analysis and call graph construction for higher-order functional programs"}]},{"@id":"https://cir.nii.ac.jp/crid/1370006919154035842","@type":"Product","relationType":["references"],"jpcoar:relatedTitle":[{"@value":"A programmable editor for developing structured documents based on bidirectional transformations"}]},{"@id":"https://cir.nii.ac.jp/crid/1370006919154035846","@type":"Product","relationType":["references"],"jpcoar:relatedTitle":[{"@value":"A pattern matching compiler for multiple target languages"}]},{"@id":"https://cir.nii.ac.jp/crid/1370006919154035847","@type":"Product","relationType":["references"],"jpcoar:relatedTitle":[{"@value":"Quotient lenses"}]},{"@id":"https://cir.nii.ac.jp/crid/1370006919154035850","@type":"Product","relationType":["references"],"jpcoar:relatedTitle":[{"@value":"An introduction to the theory of lists"}]},{"@id":"https://cir.nii.ac.jp/crid/1370006919154035852","@type":"Product","relationType":["references"],"jpcoar:relatedTitle":[{"@value":"An algebraic definition of simulation between programs"}]},{"@id":"https://cir.nii.ac.jp/crid/1370006919154035856","@type":"Product","relationType":["references"],"jpcoar:relatedTitle":[{"@value":"Bialgebra views: a way for polytypic programming to cohabit with data abstraction"}]},{"@id":"https://cir.nii.ac.jp/crid/1370006919154035857","@type":"Product","relationType":["references"],"jpcoar:relatedTitle":[{"@value":"Generic point-free lenses"}]},{"@id":"https://cir.nii.ac.jp/crid/1370006919154035858","@type":"Product","relationType":["references"],"jpcoar:relatedTitle":[{"@value":"Matching objects with patterns"}]},{"@id":"https://cir.nii.ac.jp/crid/1370006919154035859","@type":"Product","relationType":["references"],"jpcoar:relatedTitle":[{"@value":"Functional programming with bananas, lenses, envelopes and barbed wire"}]},{"@id":"https://cir.nii.ac.jp/crid/1370006919154035861","@type":"Product","relationType":["references"],"jpcoar:relatedTitle":[{"@value":"Stream fusion: from lists to streams to nothing at all"}]},{"@id":"https://cir.nii.ac.jp/crid/1370006919154035969","@type":"Product","relationType":["references"],"jpcoar:relatedTitle":[{"@value":"An algebraic approach to bi-directional updating"}]},{"@id":"https://cir.nii.ac.jp/crid/1370006919154035970","@type":"Product","relationType":["references"],"jpcoar:relatedTitle":[{"@value":"First class patterns"}]},{"@id":"https://cir.nii.ac.jp/crid/1370006919154035972","@type":"Product","relationType":["references"],"jpcoar:relatedTitle":[{"@value":"Combining syntactic and semantic bidirectionalization"}]},{"@id":"https://cir.nii.ac.jp/crid/1370006919154035974","@type":"Product","relationType":["references"],"jpcoar:relatedTitle":[{"@value":"An injective language for reversible computation"}]},{"@id":"https://cir.nii.ac.jp/crid/1370006919154035975","@type":"Product","relationType":["references"],"jpcoar:relatedTitle":[{"@value":"Primitive (co-)recursion and course-of-value (co-)iteration, categorically"}]},{"@id":"https://cir.nii.ac.jp/crid/1370006919154035976","@type":"Product","relationType":["references"],"jpcoar:relatedTitle":[{"@value":"Updatable security views"}]},{"@id":"https://cir.nii.ac.jp/crid/1370006919154035977","@type":"Product","relationType":["references"],"jpcoar:relatedTitle":[{"@value":"A new look at pattern matching in abstract data types"}]},{"@id":"https://cir.nii.ac.jp/crid/1370006919154036097","@type":"Product","relationType":["references"],"jpcoar:relatedTitle":[{"@value":"Bidirectionalization for free! (Pearl)"}]},{"@id":"https://cir.nii.ac.jp/crid/1370006919154036098","@type":"Product","relationType":["references"],"jpcoar:relatedTitle":[{"@value":"An universal resolving algorithm for inverse computation of lazy languages"}]},{"@id":"https://cir.nii.ac.jp/crid/1370006919154036099","@type":"Product","relationType":["references"],"jpcoar:relatedTitle":[{"@value":"Automatic inversion generates divide-and-conquer parallel programs"}]},{"@id":"https://cir.nii.ac.jp/crid/1370006919154036100","@type":"Product","relationType":["references"],"jpcoar:relatedTitle":[{"@value":"Extensible pattern matching via a lightweight language extension"}]},{"@id":"https://cir.nii.ac.jp/crid/1571417124467728000","@type":"Article","relationType":["references"],"jpcoar:relatedTitle":[{"@language":"en","@value":"HOPE : An Experimental applicative Language"}]}],"dataSourceIdentifier":[{"@type":"CROSSREF","@value":"10.1016/j.scico.2012.07.014"},{"@type":"KAKEN","@value":"PRODUCT-13244907"},{"@type":"OPENAIRE","@value":"doi_dedup___::db986d5b7b1be4d44c06ec0b888a3242"},{"@type":"CROSSREF","@value":"10.1145/2784731.2784750_references_DOI_XIePBGZGiNPkhDUjHF10IvlEqNQ"},{"@type":"CROSSREF","@value":"10.1007/978-3-319-89884-1_2_references_DOI_XIePBGZGiNPkhDUjHF10IvlEqNQ"},{"@type":"CROSSREF","@value":"10.1017/s0956796813000130_references_DOI_XIePBGZGiNPkhDUjHF10IvlEqNQ"},{"@type":"CROSSREF","@value":"10.1145/3607830_references_DOI_XIePBGZGiNPkhDUjHF10IvlEqNQ"},{"@type":"CROSSREF","@value":"10.1016/j.scico.2014.07.008_references_DOI_XIePBGZGiNPkhDUjHF10IvlEqNQ"},{"@type":"CROSSREF","@value":"10.1017/s0956796823000126_references_DOI_XIePBGZGiNPkhDUjHF10IvlEqNQ"},{"@type":"CROSSREF","@value":"10.1017/s0956796818000096_references_DOI_XIePBGZGiNPkhDUjHF10IvlEqNQ"}]}