{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2026,5,26]],"date-time":"2026-05-26T23:05:53Z","timestamp":1779836753645,"version":"3.53.1"},"reference-count":25,"publisher":"Cambridge University Press (CUP)","license":[{"start":{"date-parts":[[2016,7,28]],"date-time":"2016-07-28T00:00:00Z","timestamp":1469664000000},"content-version":"unspecified","delay-in-days":209,"URL":"https:\/\/www.cambridge.org\/core\/terms"}],"content-domain":{"domain":[],"crossmark-restriction":false},"short-container-title":["J. Funct. Prog."],"published-print":{"date-parts":[[2016]]},"abstract":"<jats:title>Abstract<\/jats:title>\n                  <jats:p>Generative type abstractions \u2013 present in Haskell, OCaml, and other languages \u2013 are useful concepts to help prevent programmer errors. They serve to create new types that are distinct at compile time but share a run-time representation with some base type. We present a new mechanism that allows for zero-cost conversions between generative type abstractions and their representations, even when such types are deeply nested. We prove type safety in the presence of these conversions and have implemented our work in GHC.<\/jats:p>","DOI":"10.1017\/s0956796816000150","type":"journal-article","created":{"date-parts":[[2016,7,28]],"date-time":"2016-07-28T04:28:54Z","timestamp":1469680134000},"source":"Crossref","is-referenced-by-count":9,"title":["Safe zero-cost coercions for Haskell"],"prefix":"10.1017","volume":"26","author":[{"given":"JOACHIM","family":"BREITNER","sequence":"first","affiliation":[],"role":[{"vocabulary":"crossref","role":"author"}]},{"given":"RICHARD A.","family":"EISENBERG","sequence":"additional","affiliation":[],"role":[{"vocabulary":"crossref","role":"author"}]},{"given":"SIMON","family":"PEYTON JONES","sequence":"additional","affiliation":[],"role":[{"vocabulary":"crossref","role":"author"}]},{"given":"STEPHANIE","family":"WEIRICH","sequence":"additional","affiliation":[],"role":[{"vocabulary":"crossref","role":"author"}]}],"member":"56","published-online":{"date-parts":[[2016,7,28]]},"reference":[{"key":"S0956796816000150_ref18","volume-title":"ESOP","author":"Scherer","year":"2013"},{"key":"S0956796816000150_ref12","unstructured":"Marlow S. (ed) (2010) Haskell 2010 Language Report."},{"key":"S0956796816000150_ref7","doi-asserted-by":"crossref","first-page":"361","DOI":"10.1145\/2103656.2103699","volume-title":"POPL","author":"Cretin","year":"2012"},{"key":"S0956796816000150_ref10","doi-asserted-by":"publisher","DOI":"10.1145\/227699.227700"},{"key":"S0956796816000150_ref3","doi-asserted-by":"crossref","first-page":"241","DOI":"10.1145\/1086365.1086397","volume-title":"ICFP","author":"Chakravarty","year":"2005"},{"key":"S0956796816000150_ref20","first-page":"60","volume-title":"Haskell Workshop","author":"Sheard","year":"2002"},{"key":"S0956796816000150_ref17","volume-title":"Haskell Symposium","author":"Rodriguez","year":"2008"},{"key":"S0956796816000150_ref5","volume-title":"First-Class Phantom Types","author":"Cheney","year":"2003"},{"key":"S0956796816000150_ref15","first-page":"389","volume-title":"Chap. 10 of: Advanced Topics in Types and Programming Languages","author":"Pottier","year":"2005"},{"key":"S0956796816000150_ref4","first-page":"1","volume-title":"POPL","author":"Chakravarty","year":"2005"},{"key":"S0956796816000150_ref13","doi-asserted-by":"crossref","DOI":"10.7551\/mitpress\/2319.001.0001","volume-title":"The Definition of Standard ML","author":"Milner","year":"1997"},{"key":"S0956796816000150_ref21","doi-asserted-by":"publisher","DOI":"10.1145\/1190315.1190324"},{"key":"S0956796816000150_ref6","doi-asserted-by":"publisher","DOI":"10.1145\/351240.351247"},{"key":"S0956796816000150_ref22","volume-title":"Haskell Symposium","author":"Terei","year":"2012"},{"key":"S0956796816000150_ref9","volume-title":"On Variance, Injectivity, and Abstraction","author":"Garrigue","year":"2013"},{"key":"S0956796816000150_ref2","volume-title":"Safe Zero-Cost Coercions for Haskell (Extended Version)","author":"Breitner","year":"2014"},{"key":"S0956796816000150_ref14","first-page":"203","volume-title":"Haskell Workshop","author":"Peyton Jones","year":"2001"},{"key":"S0956796816000150_ref11","first-page":"5","article-title":"Derivable type classes","volume":"41","author":"Hinze","year":"2000","journal-title":"Haskell Workshop"},{"key":"S0956796816000150_ref1","first-page":"189","volume-title":"ICFP","author":"Breitner","year":"2014"},{"key":"S0956796816000150_ref25","doi-asserted-by":"publisher","DOI":"10.1145\/2103786.2103795"},{"key":"S0956796816000150_ref19","doi-asserted-by":"publisher","DOI":"10.1017\/S0956796809990293"},{"key":"S0956796816000150_ref23","doi-asserted-by":"publisher","DOI":"10.1017\/S0956796811000098"},{"key":"S0956796816000150_ref24","first-page":"227","volume-title":"POPL","author":"Weirich","year":"2011"},{"key":"S0956796816000150_ref8","first-page":"671","volume-title":"POPL","author":"Eisenberg","year":"2014"},{"key":"S0956796816000150_ref16","doi-asserted-by":"publisher","DOI":"10.1007\/978-3-642-12251-4_4"}],"container-title":["Journal of Functional Programming"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/www.cambridge.org\/core\/services\/aop-cambridge-core\/content\/view\/S0956796816000150","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2026,5,26]],"date-time":"2026-05-26T22:36:39Z","timestamp":1779834999000},"score":1,"resource":{"primary":{"URL":"https:\/\/www.cambridge.org\/core\/product\/identifier\/S0956796816000150\/type\/journal_article"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[2016]]},"references-count":25,"alternative-id":["S0956796816000150"],"URL":"https:\/\/doi.org\/10.1017\/s0956796816000150","relation":{},"ISSN":["0956-7968","1469-7653"],"issn-type":[{"value":"0956-7968","type":"print"},{"value":"1469-7653","type":"electronic"}],"subject":[],"published":{"date-parts":[[2016]]},"article-number":"e15"}}