{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2026,5,11]],"date-time":"2026-05-11T17:24:37Z","timestamp":1778520277918,"version":"3.51.4"},"reference-count":16,"publisher":"Association for Computing Machinery (ACM)","issue":"ICFP","license":[{"start":{"date-parts":[[2018,7,30]],"date-time":"2018-07-30T00:00:00Z","timestamp":1532908800000},"content-version":"vor","delay-in-days":0,"URL":"https:\/\/creativecommons.org\/licenses\/by\/4.0\/"}],"content-domain":{"domain":["dl.acm.org"],"crossmark-restriction":true},"short-container-title":["Proc. ACM Program. Lang."],"published-print":{"date-parts":[[2018,7,30]]},"abstract":"<jats:p>We introduce StrictCheck: a property-based random testing framework for observing, specifying, and testing the strictness of Haskell functions. Strictness is traditionally considered a non-functional property; StrictCheck allows it to be tested as if it were one, by reifying demands on data structures so they can be manipulated and examined within Haskell.<\/jats:p>\n          <jats:p>Testing strictness requires us to 1) precisely specify the strictness of functions, 2) efficiently observe the evaluation of data structures, and 3) correctly generate functions with random strictness. We tackle all three of these challenges, designing an efficient generic framework for precise dynamic strictness testing. StrictCheck can specify and test the strictness of any Haskell function---including higher-order ones---with only a constant factor of overhead, and requires no boilerplate for testing functions on Haskell-standard algebraic data types. We provide an expressive but low-level specification language as a foundation upon which to build future higher-level abstractions.<\/jats:p>\n          <jats:p>We demonstrate a non-trivial application of our library, developing a correct specification of a data structure whose properties intrinsically rely on subtle use of laziness: Okasaki's constant-time purely functional queue.<\/jats:p>","DOI":"10.1145\/3236797","type":"journal-article","created":{"date-parts":[[2018,7,31]],"date-time":"2018-07-31T19:41:18Z","timestamp":1533066078000},"page":"1-30","update-policy":"https:\/\/doi.org\/10.1145\/crossmark-policy","source":"Crossref","is-referenced-by-count":6,"title":["Keep your laziness in check"],"prefix":"10.1145","volume":"2","author":[{"given":"Kenneth","family":"Foner","sequence":"first","affiliation":[{"name":"University of Pennsylvania, USA"}],"role":[{"role":"author","vocabulary":"crossref"}]},{"given":"Hengchu","family":"Zhang","sequence":"additional","affiliation":[{"name":"University of Pennsylvania, USA"}],"role":[{"role":"author","vocabulary":"crossref"}]},{"given":"Leonidas","family":"Lampropoulos","sequence":"additional","affiliation":[{"name":"University of Pennsylvania, USA"}],"role":[{"role":"author","vocabulary":"crossref"}]}],"member":"320","published-online":{"date-parts":[[2018,7,30]]},"reference":[{"key":"e_1_2_2_1_1","doi-asserted-by":"publisher","DOI":"10.1145\/2429069.2429075"},{"key":"e_1_2_2_2_1","volume-title":"Chasing Bottoms - a Case Study in Program Verification in the Presence of Partial and Infinite Values. (05","author":"Danielsson Nils Anders","year":"2004","unstructured":"Nils Anders Danielsson and Patrik Jansson . 2004. Chasing Bottoms - a Case Study in Program Verification in the Presence of Partial and Infinite Values. (05 2004 ). Nils Anders Danielsson and Patrik Jansson. 2004. Chasing Bottoms - a Case Study in Program Verification in the Presence of Partial and Infinite Values. (05 2004)."},{"key":"e_1_2_2_3_1","volume-title":"ghc-heap-view: Extract the heap representation of Haskell values and thunks. https:\/\/hackage. haskell.org\/package\/ghc-heap-view . (2014). {Online","author":"Breitner Joachim","year":"2018","unstructured":"Joachim Breitner . 2014. ghc-heap-view: Extract the heap representation of Haskell values and thunks. https:\/\/hackage. haskell.org\/package\/ghc-heap-view . (2014). {Online ; accessed 14- March - 2018 }. Joachim Breitner. 2014. ghc-heap-view: Extract the heap representation of Haskell values and thunks. https:\/\/hackage. haskell.org\/package\/ghc-heap-view . (2014). {Online; accessed 14-March-2018}."},{"key":"e_1_2_2_4_1","volume-title":"StrictCheck: a Tool for Testing Whether a Function is Unnecessarily Strict. Technical report 2-11","author":"Chitil Olaf","unstructured":"Olaf Chitil . 2011. StrictCheck: a Tool for Testing Whether a Function is Unnecessarily Strict. Technical report 2-11 . University of Kent , Kent, UK . 182\u2013196 pages. http:\/\/kar.kent.ac.uk\/30756\/ Olaf Chitil. 2011. StrictCheck: a Tool for Testing Whether a Function is Unnecessarily Strict. Technical report 2-11. University of Kent, Kent, UK. 182\u2013196 pages. http:\/\/kar.kent.ac.uk\/30756\/"},{"key":"e_1_2_2_5_1","doi-asserted-by":"publisher","DOI":"10.1145\/357766.351266"},{"key":"e_1_2_2_6_1","volume-title":"Tests and Proofs","author":"Claessen Koen","unstructured":"Koen Claessen , Nicholas Smallbone , and John Hughes . 2010. QuickSpec: Guessing Formal Specifications Using Testing . In Tests and Proofs , Gordon Fraser and Angelo Gargantini (Eds.). Springer Berlin Heidelberg , Berlin, Heidelberg , 6\u201321. Koen Claessen, Nicholas Smallbone, and John Hughes. 2010. QuickSpec: Guessing Formal Specifications Using Testing. In Tests and Proofs , Gordon Fraser and Angelo Gargantini (Eds.). Springer Berlin Heidelberg, Berlin, Heidelberg, 6\u201321."},{"key":"e_1_2_2_7_1","doi-asserted-by":"publisher","DOI":"10.1145\/2633628.2633634"},{"key":"e_1_2_2_8_1","doi-asserted-by":"publisher","DOI":"10.1016\/S1571-0661(05)80538-9"},{"key":"e_1_2_2_9_1","volume-title":"Proceedings of the 2nd Workshop on Generic Programming, Ponte de. 17\u201332","author":"Hinze Ralf","year":"2000","unstructured":"Ralf Hinze . 2000 . Memo Functions, Polytypically! . In Proceedings of the 2nd Workshop on Generic Programming, Ponte de. 17\u201332 . Ralf Hinze. 2000. Memo Functions, Polytypically!. In Proceedings of the 2nd Workshop on Generic Programming, Ponte de. 17\u201332."},{"key":"e_1_2_2_10_1","doi-asserted-by":"publisher","DOI":"10.1093\/comjnl\/32.2.98"},{"key":"e_1_2_2_11_1","unstructured":"Edward A. Kmett. 2017. recursion-schemes: Generalized bananas lenses and barbed wire. http:\/\/hackage.haskell.org\/ package\/recursion-schemes . (2017). {Online; accessed 12-June-2018}.  Edward A. Kmett. 2017. recursion-schemes: Generalized bananas lenses and barbed wire. http:\/\/hackage.haskell.org\/ package\/recursion-schemes . (2017). {Online; accessed 12-June-2018}."},{"key":"e_1_2_2_12_1","volume-title":"Lenses, Envelopes and Barbed Wire","author":"Meijer Erik","unstructured":"Erik Meijer , Maarten Fokkinga , and Ross Paterson . 1991. Functional Programming with Bananas , Lenses, Envelopes and Barbed Wire . Springer-Verlag , 124\u2013144. Erik Meijer, Maarten Fokkinga, and Ross Paterson. 1991. Functional Programming with Bananas, Lenses, Envelopes and Barbed Wire. Springer-Verlag, 124\u2013144."},{"key":"e_1_2_2_13_1","volume-title":"vacuum: Graph representation of the GHC heap. https:\/\/hackage.haskell.org\/package\/ vacuum . (2009). {Online","author":"Morrow Matt","year":"2018","unstructured":"Matt Morrow and Austin Seipp . 2009. vacuum: Graph representation of the GHC heap. https:\/\/hackage.haskell.org\/package\/ vacuum . (2009). {Online ; accessed 16- March - 2018 }. Matt Morrow and Austin Seipp. 2009. vacuum: Graph representation of the GHC heap. https:\/\/hackage.haskell.org\/package\/ vacuum . (2009). {Online; accessed 16-March-2018}."},{"key":"e_1_2_2_14_1","doi-asserted-by":"publisher","DOI":"10.1017\/S0956796800001489"},{"key":"e_1_2_2_15_1","volume-title":"Purely Functional Data Structures","author":"Okasaki Chris","unstructured":"Chris Okasaki . 1998. Purely Functional Data Structures . Cambridge University Press , New York, NY, USA . Chris Okasaki. 1998. Purely Functional Data Structures. Cambridge University Press, New York, NY, USA."},{"key":"e_1_2_2_16_1","doi-asserted-by":"publisher","DOI":"10.1145\/1411286.1411292"}],"container-title":["Proceedings of the ACM on Programming Languages"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/3236797","content-type":"unspecified","content-version":"vor","intended-application":"text-mining"},{"URL":"https:\/\/dl.acm.org\/doi\/pdf\/10.1145\/3236797","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2025,6,18]],"date-time":"2025-06-18T21:41:28Z","timestamp":1750282888000},"score":1,"resource":{"primary":{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/3236797"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[2018,7,30]]},"references-count":16,"journal-issue":{"issue":"ICFP","published-print":{"date-parts":[[2018,7,30]]}},"alternative-id":["10.1145\/3236797"],"URL":"https:\/\/doi.org\/10.1145\/3236797","relation":{},"ISSN":["2475-1421"],"issn-type":[{"value":"2475-1421","type":"electronic"}],"subject":[],"published":{"date-parts":[[2018,7,30]]},"assertion":[{"value":"2018-07-30","order":2,"name":"published","label":"Published","group":{"name":"publication_history","label":"Publication History"}}]}}