Skip to main content
×
Home

No value restriction is needed for algebraic effects and handlers*

  • OHAD KAMMAR (a1) (a2) and MATIJA PRETNAR (a3)
Abstract
Abstract

We present a straightforward, sound, Hindley–Milner polymorphic type system for algebraic effects and handlers in a call-by-value calculus, which, to our surprise, allows type variable generalisation of arbitrary computations, and not just values. We first recall that the soundness of unrestricted call-by-value Hindley–Milner polymorphism is known to fail in the presence of computational effects such as reference cells and continuations, and that many programming examples can be recast to use effect handlers instead of these effects. After presenting the calculus and its soundness proof, formalised in Twelf, we analyse the expressive power of effect handlers with respect to state effects. We conjecture handlers alone cannot express reference cells, but show they can simulate dynamically scoped state, establishing that dynamic binding also does not need a value restriction.

Copyright
References
Hide All
Ahman D. (2015) Refinement types for algebraic effects (2015). In: Abstracts of the 21st Meeting ‘Types for Proofs and Programs’ (TYPES), Institute of Cybernetics, Tallinn University of Technology, pp. 10–11.
Ahman D., Ghani N. & Plotkin G. D. (2016) Dependent types and fibred computational effects. In Proceedings of the 19th International Conference, Foundations of Software Science and Computation Structures - FOSSACS 2016, Held as Part of the European Joint Conferences on Theory and Practice of Software, ETAPS 2016, Eindhoven, The Netherlands, April 2–8, 2016, Jacobs B. & Löding C. (eds), Lecture Notes in Computer Science, vol. 9634. Berlin: Springer, pp. 3654.
Ahman D. & Staton S. (2013) Normalization by evaluation and algebraic effects. Electr. Notes Theor. Comput. Sci. 298, 5169.
Appel A. W. & MacQueen D. B. (1991) Standard ML of New Jersey. In PLILP, pp. 1–13.
Asai K. & Kameyama Y. (2007) Polymorphic delimited continuations. In APLAS, Lecture Notes in Computer Science, vol. 4807. Springer, pp. 239254.
Bauer A. & Pretnar M. (2014) An effect system for algebraic effects and handlers. Log. Methods Comput. Sci. 10 (4:9), pp. 129.
Bauer A. & Pretnar M. (2015) Programming with algebraic effects and handlers. J. Log. Algebr. Meth. Program. 84 (1), 108123.
Benton N., Kennedy A. & Russell G. (1998) Compiling standard ML to java bytecodes. In Proceedings of the 3rd ACM SIGPLAN International Conference on Functional Programming (ICFP '98), Baltimore, Maryland, USA, September 27–29, 1998, Felleisen M., Hudak P. & Queinnec C. (eds), ACM, pp. 129140.
Brady E. (2013) Programming and reasoning with algebraic effects and dependent types. In Proceedings of ACM SIGPLAN International Conference on Functional Programming, ICFP'13, Boston, MA, USA, September 25–27, 2013, Morrisett G. & Uustalu T. (eds), ACM, pp. 133144.
Brady E. (2014) Resource-dependent algebraic effects. In Proceedings of the 15th International Symposium on Trends in Functional Programming, TFP 2014, Soesterberg, The Netherlands, May 26–28, 2014. Revised Selected Papers. Hage J., & McCarthy J. (eds), Lecture Notes in Computer Science, pp. 1833. Berlin: Springer.
Cardelli L. (1991) Typeful programming. In Formal Description of Programming Concepts, Neuhold E. J. & Paul M. (eds). Berlin: Springer-Verlag, pp. 431507.
Cardelli L. & Mitchell J. C. (1991) Operations on records. Math. Struct. Comput. Sci. 1 (1), 348.
Cartwright R. & Felleisen M. (1994) Extensible denotational language specifications. In Proceedings of International Conference TACS '94 on Theoretical Aspects of Computer Software, Sendai, Japan, April 19–22, 1994, Hagiya M. & Mitchell J. C. (eds). Lecture Notes in Computer Science, vol. 789. Springer pp. 244272.
Cooper E., Lindley S., Wadler P. & Yallop J. (2006) Links: Web programming without tiers. In Proceedings of the 5th International Symposium on Formal Methods for Components and Objects, FMCO 2006, Amsterdam, The Netherlands, November 7–10, 2006, Revised Lectures, de Boer F. S., Bonsangue M. M., Graf S. & de Roever W. P. (eds), Lecture Notes in Computer Science, vol. 4709. Springer, pp. 266296.
Danvy O. (2006) An Analytical Approach to Programs as Data oObjects. DSc dissertation, Department of Computer Science, University of Aarhus.
Danvy O. & Filinski A. (1989) A Functional Abstraction of Typed Contexts. Technical Report 89/12. DIKU.
Danvy O. & Filinski A. (1990) Abstracting control. In LISP and Functional Programming. pp. 151–160.
Felleisen M. (1988) The theory and practice of first-class prompts. In Conference Record of the 15th Annual ACM Symposium on Principles of Programming Languages, San Diego, California, USA, January 10–13, 1988, Ferrante J. & Mager P. (eds), ACM Press, pp. 180190.
Felleisen M. (1991) On the expressive power of programming languages. Sci. Comput. Program. 17 (1–3), 3575.
Felleisen M., Wand M., Friedman D. P. & Duba B. F. (1988) Abstract continuations: A mathematical semantics for handling full jumps. In LISP and Functional Programming, pp. 52–62.
Filinski A. (1994) Representing monads. In Conference Record of POPL'94: 21st ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages, Portland, Oregon, USA, January 17–21, 1994, Boehm H.-J., Lang B. & Yellin D. M. (eds), ACM Press, pp. 446457.
Fiore M. P. & Staton S. (2014) Substitution, jumps, and algebraic effects. In CSL-LICS. ACM, pp. 41:1–41:10.
Forster Y., Kammar O., Lindley S. & Pretnar M. (2016) On the expressive power of user-defined effects: Effect handlers, monadic reflection, delimited control. arXiv:1610.09161 [cs.LO].
Garrigue J. (2001) Simple type inference for structural polymorphism. In Proceedings of the 2nd Asian Workshop on Programming Languages and Systems, APLAS'01, Korea Advanced Institute of Science and Technology, Daejeon, Korea, December 17–18, 2001, pp. 329343.
Garrigue J. (2004) Relaxing the value restriction. In FLOPS. Lecture Notes in Computer Science, vol. 2998. Berlin: Springer, pp. 196213.
Garrigue J. (2010) A certified implementation of ML with structural polymorphism. In Proceedings of the 8th Asian Symposium on Programming Languages and Systems, APLAS 2010, Shanghai, China, November 28–December 1, 2010, Ueda K. (ed), Lecture Notes in Computer Science, vol. 6461. Springer, pp. 360375
Garrigue J. (2015) A certified implementation of ML with structural polymorphism and recursive types. Math. Struct. Comput. Sci. 25 (4), 867891.
Gifford D. K. & Lucassen J. M. (1986) Integrating functional and imperative programming. In LISP and Functional Programming, pp. 28–38.
Girard J.-Y. (1972) (June) Interprétation fonctionnelle et élimination des coupures de l'arith-métique d'ordre supérieur. Thèse de doctorat d'état, Université Paris VII.
Gordon A. D. (ed). (2017) Proceedings of the 44th Annual ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages Paris, France—January 18–20, 2017, ACM New York, NY, USA, 978-1-4503-4660-3.
Gordon M. J. C., Milner R. & Wadsworth C. P. (1979) Edinburgh LCF. Lecture Notes in Computer Science, vol. 78. Berlin: Springer.
Gunter C. A., Rémy D. & Riecke J. G. (1995) A generalization of exceptions and control in ML-like languages. In FPCA. ACM, pp. 1223
Hancock P. & Setzer A. (2000) Interactive programs in dependent type theory. In Proceedings of the 14th Annual Conference of the EACSL on Computer Science Logic, Fischbachau, Germany, August 21–26, 2000, Clote P. & Schwichtenberg H. (eds), Lecture Notes in Computer Science, vol. 1862. Springer, pp. 317331
Harper R. & Lillibridge M. (1993a) Explicit polymorphism and CPS conversion. In Conference Record of the 20th Annual ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages, Charleston, South Carolina, USA, January 1993, Deusen M. S. Van & Lang B. (eds), ACM Press, pp. 206219.
Harper R. & Lillibridge M. (1993b) Polymorphic type assignment and CPS conversion. Lisp Symbolic Comput. 6 (3–4), 361380.
Harper R. & Mitchell J. C. (1993) On the type structure of standard ML. ACM Trans. Program. Lang. Syst. 15 (2), 211252.
Harper R. & Pierce B. C. (1991) A record calculus based on symmetric concatenation. In Conference Record of the 18th Annual ACM Symposium on Principles of Programming Languages, Orlando, Florida, USA, January 21–23, 1991, Wise D. S. (ed), ACM Press, pp. 131142.
Hillerström D. & Lindley S. (2016) Liberating effects with rows and handlers. In Proceedings of the 1st International Workshop on Type-Driven Development, September 2016, Chapman J. & Swierstra W. (eds), ACM, pp. 1527.
Hyland M., Plotkin G. D. & Power J. (2006) Combining effects: Sum and tensor. Theor. Comput. Sci. 357 (1–3), 7099.
Jaber G. & Tzevelekos N. (2016) Trace semantics for polymorphic references. In Proceedings of the 31st Annual ACM/IEEE Symposium on Logic in Computer Science (LICS '16). ACM, New York, NY, USA, 585594. DOI: https://doi.org/10.1145/2933575.2934509
Kameyama Y. & Yonezawa T. (2008) Typed dynamic control operators for delimited continuations. In Proceedings of Functional and Logic Programming, 9th International Symposium, FLOPS 2008, Ise, Japan, April 14–16, 2008, Garrigue J. & Hermenegildo M. V. (eds), Lecture Notes in Computer Science, vol. 4989. Springer, pp. 239254.
Kammar O. (2014) An Algebraic Theory of Type-and-Effect Systems. Ph.D. Thesis, University of Edinburgh, UK.
Kammar O. & Plotkin G. D. (2012) Algebraic foundations for effect-dependent optimisations. In Proceedings of the 39th ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages, POPL 2012, Philadelphia, Pennsylvania, USA, January 22–28, 2012, Field J. & Hicks M. (eds), ACM, pp. 349360.
Kammar O., Lindley S. & Oury N. (2013) Handlers in action. In ICFP, ACM, pp. 145158.
Katsumata S. (2013) Relating computational effects by ⊤⊤-lifting. Inf. Comput. 222, 228246.
Katsumata S. (2014) Parametric effect monads and semantics of effect systems. In Proceedings of the 41st Annual ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages, POPL '14, San Diego, CA, USA, January 20–21, 2014, Jagannathan S. & Sewell P. (eds), ACM, pp. 633646.
Kiselyov O. (2015) Generating Code with Polymorphic Let. Technical Report, Tohoku University, Japan. Extended abstract submitted to the ACM SIGPLAN Workshop on ML.
Kiselyov O. & Ishii H. (2015) Freer monads, more extensible effects. In Proceedings of the 8th ACM SIGPLAN Symposium on Haskell, Haskell 2015, Vancouver, BC, Canada, September 3–4, 2015, Lippmeier B. (ed), ACM, pp. 94105.
Kiselyov O. & Shan C.-C. (2007) A substructural type system for delimited continuations. In Proceedings of the 8th International Conference on Typed Lambda Calculi and Applications, TLCA 2007, Paris, France, June 26–28, 2007, Rocca S. & Ronchi D. (ed), Lecture Notes in Computer Science, vol. 4583. Springer, pp. 223239.
Kiselyov O., Shan C.-C. & Sabry A. (2006) Delimited dynamic binding. In ICFP. ACM, pp. 2637.
Kiselyov O., Sabry A. & Swords C. (2013) Extensible effects: An alternative to monad transformers. In Haskell. ACM, pp. 5970.
Landin P. J. (1964) The mechanical evaluation of expressions. Comput. J. 6 (4), 308320.
Leijen D. (2014) Koka: Programming with row polymorphic effect types. In MSFP. EPTCS, vol. 153, pp. 100–126.
Leijen D. (2017) Type directed compilation of row-typed algebraic effects. In Proceedings of the 44th ACM SIGPLAN Symposium on Principles of Programming Languages (POPL 2017), Gordon A. D. (ed), ACM, New York, NY, USA, pp. 486499.
Lepigre R. (2016) A classical realizability model for a semantical value restriction. In Proceedings of the 25th European Symposium on Programming, Programming Languages and Systems, ESOP 2016, Held as Part of the European Joint Conferences on Theory and Practice of Software, ETAPS 2016, Eindhoven, The Netherlands, April 2–8, 2016, Thiemann P. (ed), Lecture Notes in Computer Science, vol. 9632. Springer, pp. 476502.
Leroy X. (1992) Typage Polymorphe D'un Langage Algorithmique. PhD Thesis (in French), Université Paris 7.
Leroy X. (1993) Polymorphism by name for references and continuations. In POPL. ACM Press, pp. 220231.
Leroy X. & Weis P. (1991) Polymorphic type inference and assignment. In POPL. ACM Press, pp. 291302.
Levy P. B. (2004) Call-by-Push-Value: A Functional/Imperative Synthesis. Semantics Structures in Computation, vol. 2. Berlin: Springer.
Levy P. B., Power J. & Thielecke H. (2003) Modelling environments in call-by-value programming languages. Inf. Comput. 185 (2), 182210.
Lillibridge M. (1999) Unchecked exceptions can be strictly more powerful than call/cc. Higher-Order Symbol. Comput. 12 (1), 75104.
Lindley S. & Cheney J. (2012) Row-based effect types for database integration. In TLDI. ACM, pp. 91102.
Lindley S., McBride C. & McLaughlin C. (2017) Do be do be do. In Proceedings of the 44th ACM SIGPLAN Symposium on Principles of Programming Languages (POPL 2017), Gordon A. D. (ed), ACM, New York, NY, USA, pp. 500514.
Lippmeier B. (2009) Witnessing purity, constancy and mutability. In Proceedings of the 7th Asian Symposium on Programming Languages and Systems, APLAS 2009, Seoul, Korea, December 14–16, 2009, Hu Z. (ed), Lecture Notes in Computer Science, vol. 5904. Springer, pp. 95110.
Lucassen J. M. & Gifford D. K. (1988) Polymorphic effect systems. In POPL. ACM Press, pp. 4757.
Marino D. & Millstein T. D. (2009) A generic type-and-effect system. In Proceedings of TLDI'09: 2009 ACM SIGPLAN International Workshop on Types in Languages Design and Implementation, Savannah, GA, USA, January 24, 2009, Kennedy A. & Ahmed A. (eds), ACM, pp. 3950.
Melliès P.-A. (2010) Segal condition meets computational effects. In Proceedings of the 25th Annual IEEE Symposium on Logic in Computer Science, LICS 2010, 11–14 July 2010, Edinburgh, United Kingdom. IEEE Computer Society, pp. 150159.
Melliès Paul-André. (2014) Local states in string diagrams. In Proceedings of Rewriting and Typed Lambda Calculi - Joint International Conference, RTA-TLCA 2014, Held as Part of the Vienna Summer of Logic, VSL 2014, Vienna, Austria, July 14–17, 2014, Dowek G. (ed), Lecture Notes in Computer Science, vol. 8560. Springer, pp. 334348.
Milner R. (1978) A theory of type polymorphism in programming. J. Comput. Syst. Sci. 17 (3), 348375.
Moggi E. (1991) Notions of computation and monads. Inf. Comput. 93 (1), 5592.
Moreau L. (1998) A syntactic theory of dynamic binding. Higher-order and Symbolic Computation 11 (3), 233279.
Munch-Maccagnoni G. (2009) Focalisation and classical realisability. In Computer Science Logic '09, Grädel E. & Kahle R. (eds), Lecture Notes in Computer Science, vol. 5771. Heidelberg: Springer, pp. 409423.
Nielson F. & Nielson H. R. (1999) Type and effect systems. In Correct System Design, Recent Insight and Advances, (to Hans Langmaack on the Occasion of his Retirement from his Professorship at the University of Kiel), Olderog E.-R. & Steffen B. (eds), Lecture Notes in Computer Science, vol. 1710. Berlin: Springer, pp. 114136.
Ohori A. (1989) A simple semantics for ML polymorphism. In Proceedings of the 4th International Conference on Functional Programming Languages and Computer Architecture, FPCA 1989, London, UK, September 11–13, 1989, Stoy J. E. (ed), ACM, pp. 281292.
Ohori A. (1992) A compilation method for ML-style polymorphic record calculi. In Proceedings of the 19th ACM SIGPLAN-SIGACT symposium on Principles of programming languages (POPL '92), January 19–22, 1992, Sethi R. (ed), ACM, New York, NY, USA, pp. 154165.
Ohori A. (1995) A polymorphic record calculus and its compilation. ACM Trans. Program. Lang. Syst. 17 (6), 844895.
Pfenning F. & Schürmann C. (1999) System description: Twelf - A meta-logical framework for deductive systems. In CADE. Lecture Notes in Computer Science, vol. 1632. Springer, pp. 202206.
Pierce B. C. (2002) Types and Programming Languages. Cambridge, MA, USA: MIT Press.
Pitts A. M. (2011–2016) Types. Lecture notes, University of Cambridge Computer Laboratory.
Plotkin G. D. (1977) LCF considered as a programming language. Theor. Comput. Sci. 5 (3), 223255.
Plotkin G. D. & Power J. (2002) Notions of computation determine monads. In Proceedings of the 5th International Conference, Foundations of Software Science and Computation Structures, FOSSACS 2002. Held as Part of the Joint European Conferences on Theory and Practice of Software, ETAPS 2002, Grenoble, France, April 8–12, 2002, Nielsen M. & Engberg U. (eds), Lecture Notes in Computer Science, vol. 2303. Springer, pp. 342356.
Plotkin G. D. & Power J. (2003) Algebraic operations and generic effects. Appl. Categorical Struct. 11 (1), 6994.
Plotkin G. D. & Pretnar M. (2008) A logic for algebraic effects. In Proceedings of the 23rd Annual IEEE Symposium on Logic in Computer Science, LICS 2008, 24–27 June 2008, Pittsburgh, PA, USA. IEEE Computer Society, pp. 118129
Plotkin G. D. & Pretnar M. (2013) Handling algebraic effects. Logical Methods in Comput. Sci. 9 (4).
Pretnar M. (2010) Logic and Handling of Algebraic Effects. Ph.D. thesis, University of Edinburgh, UK.
Pretnar M. (2014) Inferring algebraic effects. Log. Methods Comput. Sci. 10 (3).
Pretnar M. (2015) An introduction to algebraic effects and handlers. invited tutorial paper. Electr. Notes Theor. Comput. Sci. 319, 1935.
Rémy D. (1990) Algèbres touffues. application au typage polymorphe des objets enregistrements dans les langages fonctionnels. Thèse de doctorat, Université de Paris 7.
Rémy D. 1991 (May) Type Inference for Records in a Natural Extension of ML. Research Report 1431. Institut National de Recherche en Informatique et Automatisme, Rocquencourt, BP 105, 78 153 Le Chesnay Cedex, France.
Rémy D. (2015) Type Systems. Lecture notes, Parisian Master of Research in Computer Science.
Reynolds J. C. (1974) Towards a theory of type structure. In Programming Symposium, Proceedings Colloque Sur La Programmation. London, UK: Springer-Verlag, pp. 408423.
Reynolds J. C. (1984) Polymorphism is not set-theoretic. In Proceedings of Semantics of Data Types, International Symposium, Sophia-Antipolis, France, June 27–29, 1984, Kahn G., MacQueen D. B. & Plotkin G. D. (eds), Lecture Notes in Computer Science, vol. 173. Springer. pp. 145156.
Rompf T., Maier I. & Odersky M. (2009) Implementing first-class polymorphic delimited continuations by a type-directed selective cps-transform. In Proceeding of the 14th ACM SIGPLAN International Conference on Functional Programming, ICFP 2009, Edinburgh, Scotland, UK, August 31–September 2, 2009, Hutton G. & Tolmach A. P. (eds), ACM, pp. 317328.
Saleh A. H. & Schrijvers T. (2016) Efficient algebraic effect handlers for prolog. Corr abs/1608.00816.
Scott D. S. (1993) A type-theoretical alternative to ISWIM, CUCH, OWHY. Theor. Comput. Sci. 121 (1&2), 411440.
Sethi R. (ed). (1992) Proceedings of the 19th ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages. January 19–22, 1992. ACM, New York, NY, USA.
Shan C.-C. (2007) A static simulation of dynamic delimited control. Higher-Order Symbol. Comput. 20 (4), 371401.
Staton S. (2009) Two cotensors in one: Presentations of algebraic theories for local state and fresh names. Electr. Notes Theor. Comput. Sci. 249, 471490.
Staton S. (2010) Completeness for algebraic theories of local state. In Proceedings of 13th International Conference, Foundations of Software Science and Computational Structures, FOSSACS 2010, Held as Part of the Joint European Conferences on Theory and Practice of Software, ETAPS 2010, Paphos, Cyprus, March 20–28, 2010, Ong C.-H. Luke (ed), Lecture Notes in Computer Science, vol. 6014. Springer, pp. 4863.
Staton S. (2013a) An algebraic presentation of predicate logic - (extended abstract). In Proceedings of 16th International Conference, Foundations of Software Science and Computation Structures, FOSSACS 2013, Held as Part of the European Joint Conferences on Theory and Practice of Software, ETAPS 2013, Rome, Italy, March 16–24, Pfenning F. (ed), Lecture Notes in Computer Science, vol. 7794, Springer, pp. 401417.
Staton S. (2013b) Instances of computational effects: An algebraic perspective. In LICS, IEEE Computer Society., pp. 519.
Staton S. (2015) Algebraic effects, linearity, and quantum programming languages. In Proceedings of the 42nd Annual ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages, POPL 2015, Mumbai, India, January 15–17, 2015, Rajamani S. K. & Walker D. (eds), ACM, pp. 395406.
Swierstra W. (2008) Data types à la carte. J. Funct. Program. 18 (4), 423436.
Tofte M. (1990) Type inference for polymorphic references. Inf. Comput. 89 (1), 134.
Tolmach A. P. (1998) Optimizing ML using a hierarchy of monadic types. In Proceedings of the 2nd International Workshop on Types in Compilation, TIC '98, Kyoto, Japan, March 25–27, 1998, Leroy X. & Ohori A. (eds), Lecture Notes in Computer Science, vol. 1473. Springer, pp. 97115.
Wadler P. (1992) The essence of functional programming. In Proceedings of the 19th ACM SIGPLAN-SIGACT symposium on Principles of programming languages (POPL '92), January 19–22, 1992, Sethi R. (ed), ACM, New York, NY, USA, pp. 114.
Wadler P. & Thiemann P. (2003) The marriage of effects and monads. ACM Trans. Comput. Log. 4 (1), 132.
Wand M. (1987) Complete type inference for simple objects. In Proceedings of the Symposium on Logic in Computer Science (LICS '87), Ithaca, New York, USA, June 22–25, 1987. IEEE Computer Society, pp. 3744.
Wells J. B. (1999) Typability and type checking in System F are equivalent and undecidable. Ann. Pure Appl. Logic 98 (1–3), 111156.
Wright A. K. (1995) Simple imperative polymorphism. Lisp Symbol. Comput. 8 (4), 343355.
Wu N. & Schrijvers T. (2015) Fusion for free—efficient algebraic effect handlers. In Proceedings of the 12th International Conference on Mathematics of Program Construction, MPC 2015, Königswinter, Germany, June 29–July 1, 2015, Hinze R. & Voigtländer J. (eds), Lecture Notes in Computer Science, vol. 9129. Springer, pp. 302322.
Wu N., Schrijvers T. & Hinze R. (2014) Effect handlers in scope. In Haskell. ACM, pp. 112.
Zeilberger N. (2009) Refinement types and computational duality. In Proceedings of the 3rd ACM Workshop on Programming Languages meets Program Verification, PLPV 2009, Savannah, GA, USA, January 20, 2009, Altenkirch T. & Millstein T. D. (eds), ACM, pp. 1526.
Recommend this journal

Email your librarian or administrator to recommend adding this journal to your organisation's collection.

Journal of Functional Programming
  • ISSN: 0956-7968
  • EISSN: 1469-7653
  • URL: /core/journals/journal-of-functional-programming
Please enter your name
Please enter a valid email address
Who would you like to send this to? *
×
Type Description Title
UNKNOWN
Supplementary Materials

Kammar and Pretnar supplementary material
Kammar and Pretnar supplementary material 1

 Unknown (38 KB)
38 KB

Metrics

Full text views

Total number of HTML views: 0
Total number of PDF views: 51 *
Loading metrics...

Abstract views

Total abstract views: 327 *
Loading metrics...

* Views captured on Cambridge Core between 24th January 2017 - 14th December 2017. This data will be updated every 24 hours.