{"id":2596,"date":"2015-09-15T01:19:23","date_gmt":"2015-09-15T01:19:23","guid":{"rendered":"http:\/\/www.garysieling.com\/blog\/?p=2596"},"modified":"2015-09-15T01:19:23","modified_gmt":"2015-09-15T01:19:23","slug":"scala-foldleft-example","status":"publish","type":"post","link":"https:\/\/www.garysieling.com\/blog\/scala-foldleft-example\/","title":{"rendered":"Scala foldLeft example"},"content":{"rendered":"<p>If you haven&#8217;t seen curried functions before, the syntax for foldLeft looks pretty weird:<\/p>\n<pre lang=\"Scala\">\nList(1, 2, 3)\n  .foldLeft(0)((x, y) => { x + y })\n\nres108: Int = 6\n<\/pre>\n<p>The first foldLeft argument is the initial value (0), and the second is a function to combine two values (0 + 1, then 1 + 2, then 3 + 3).<\/p>\n<pre lang=\"scala\">\nscala> List(1, 2, 3).foldLeft(0)_\nres110: ((Int, Int) => Int) => Int = <function1>\n<\/pre>\n<p>One of the neat things about this style of programming is that you can have the code that sets the initial value be far afield from the code that provides the summing operation (this is useful if you&#8217;re defining events that touch a model &#8211; the model could expose defaults this way, while delegating event handling to other classes)<\/p>\n<p>The syntax for this is a bit weird, and the type that results is nearly incomprehensible:<\/p>\n<pre lang=\"Scala\">\nval y = List(1, 2, 3).foldLeft(0)_\ny: ((Int, Int) => Int) => Int = <function1>\n<\/pre>\n<p>But, it works just liked you&#8217;d expect:<\/p>\n<pre lang=\"scala\"\nscala> y( (a, b) => a + b )\nres111: Int = 6\n<\/pre>\n<p>How is this different from &#8220;reduce&#8221;? See here:<\/p>\n<pre lang=\"scala\">\nList(1, 2, 3).reduce( (x, y) => x + y )\n<\/pre>\n<p>Reduce is simpler, and is called without the default value (if you weren&#8217;t previously familiar with foldLeft, you might actually expect it&#8217;s signature to match the example above!)<\/p>\n","protected":false},"excerpt":{"rendered":"<p>If you haven&#8217;t seen curried functions before, the syntax for foldLeft looks pretty weird: List(1, 2, 3) .foldLeft(0)((x, y) => { x + y }) res108: Int = 6 The first foldLeft argument is the initial value (0), and the second is a function to combine two values (0 + 1, then 1 + 2, &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/www.garysieling.com\/blog\/scala-foldleft-example\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;Scala foldLeft example&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"footnotes":""},"categories":[4],"tags":[480,482,488],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.9 - aioseo.com -->\n\t<meta name=\"description\" content=\"If you haven&#039;t seen curried functions before, the syntax for foldLeft looks pretty weird: List(1, 2, 3) .foldLeft(0)((x, y) =&gt; { x + y }) res108: Int = 6 The first foldLeft argument is the initial value (0), and the second is a function to combine two values (0 + 1, then 1 + 2,\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"gary\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/www.garysieling.com\/blog\/scala-foldleft-example\/\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.9\" \/>\n\t\t<meta property=\"og:locale\" content=\"en_US\" \/>\n\t\t<meta property=\"og:site_name\" content=\"Gary Sieling - Software Engineer\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"Scala foldLeft example - Gary Sieling\" \/>\n\t\t<meta property=\"og:description\" content=\"If you haven&#039;t seen curried functions before, the syntax for foldLeft looks pretty weird: List(1, 2, 3) .foldLeft(0)((x, y) =&gt; { x + y }) res108: Int = 6 The first foldLeft argument is the initial value (0), and the second is a function to combine two values (0 + 1, then 1 + 2,\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/www.garysieling.com\/blog\/scala-foldleft-example\/\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2015-09-15T01:19:23+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2015-09-15T01:19:23+00:00\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n\t\t<meta name=\"twitter:title\" content=\"Scala foldLeft example - Gary Sieling\" \/>\n\t\t<meta name=\"twitter:description\" content=\"If you haven&#039;t seen curried functions before, the syntax for foldLeft looks pretty weird: List(1, 2, 3) .foldLeft(0)((x, y) =&gt; { x + y }) res108: Int = 6 The first foldLeft argument is the initial value (0), and the second is a function to combine two values (0 + 1, then 1 + 2,\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"BlogPosting\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/scala-foldleft-example\\\/#blogposting\",\"name\":\"Scala foldLeft example - Gary Sieling\",\"headline\":\"Scala foldLeft example\",\"author\":{\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/author\\\/gary\\\/#author\"},\"publisher\":{\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/#organization\"},\"datePublished\":\"2015-09-15T01:19:23+00:00\",\"dateModified\":\"2015-09-15T01:19:23+00:00\",\"inLanguage\":\"en-US\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/scala-foldleft-example\\\/#webpage\"},\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/scala-foldleft-example\\\/#webpage\"},\"articleSection\":\"Code Examples, scala, scala-collections, scala-reference\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/scala-foldleft-example\\\/#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog#listItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.garysieling.com\\\/blog\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/category\\\/code-examples\\\/#listItem\",\"name\":\"Code Examples\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/category\\\/code-examples\\\/#listItem\",\"position\":2,\"name\":\"Code Examples\",\"item\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/category\\\/code-examples\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/scala-foldleft-example\\\/#listItem\",\"name\":\"Scala foldLeft example\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog#listItem\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/scala-foldleft-example\\\/#listItem\",\"position\":3,\"name\":\"Scala foldLeft example\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/category\\\/code-examples\\\/#listItem\",\"name\":\"Code Examples\"}}]},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/#organization\",\"name\":\"Gary Sieling\",\"description\":\"Software Engineer\",\"url\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/author\\\/gary\\\/#author\",\"url\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/author\\\/gary\\\/\",\"name\":\"gary\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/scala-foldleft-example\\\/#authorImage\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/0be925276d848ffe98a6a9dc8cf33e67?s=96&d=identicon&r=g\",\"width\":96,\"height\":96,\"caption\":\"gary\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/scala-foldleft-example\\\/#webpage\",\"url\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/scala-foldleft-example\\\/\",\"name\":\"Scala foldLeft example - Gary Sieling\",\"description\":\"If you haven't seen curried functions before, the syntax for foldLeft looks pretty weird: List(1, 2, 3) .foldLeft(0)((x, y) => { x + y }) res108: Int = 6 The first foldLeft argument is the initial value (0), and the second is a function to combine two values (0 + 1, then 1 + 2,\",\"inLanguage\":\"en-US\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/scala-foldleft-example\\\/#breadcrumblist\"},\"author\":{\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/author\\\/gary\\\/#author\"},\"creator\":{\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/author\\\/gary\\\/#author\"},\"datePublished\":\"2015-09-15T01:19:23+00:00\",\"dateModified\":\"2015-09-15T01:19:23+00:00\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/\",\"name\":\"Gary Sieling\",\"description\":\"Software Engineer\",\"inLanguage\":\"en-US\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/#organization\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"Scala foldLeft example - Gary Sieling","description":"If you haven't seen curried functions before, the syntax for foldLeft looks pretty weird: List(1, 2, 3) .foldLeft(0)((x, y) => { x + y }) res108: Int = 6 The first foldLeft argument is the initial value (0), and the second is a function to combine two values (0 + 1, then 1 + 2,","canonical_url":"https:\/\/www.garysieling.com\/blog\/scala-foldleft-example\/","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"BlogPosting","@id":"https:\/\/www.garysieling.com\/blog\/scala-foldleft-example\/#blogposting","name":"Scala foldLeft example - Gary Sieling","headline":"Scala foldLeft example","author":{"@id":"https:\/\/www.garysieling.com\/blog\/author\/gary\/#author"},"publisher":{"@id":"https:\/\/www.garysieling.com\/blog\/#organization"},"datePublished":"2015-09-15T01:19:23+00:00","dateModified":"2015-09-15T01:19:23+00:00","inLanguage":"en-US","mainEntityOfPage":{"@id":"https:\/\/www.garysieling.com\/blog\/scala-foldleft-example\/#webpage"},"isPartOf":{"@id":"https:\/\/www.garysieling.com\/blog\/scala-foldleft-example\/#webpage"},"articleSection":"Code Examples, scala, scala-collections, scala-reference"},{"@type":"BreadcrumbList","@id":"https:\/\/www.garysieling.com\/blog\/scala-foldleft-example\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/www.garysieling.com\/blog#listItem","position":1,"name":"Home","item":"https:\/\/www.garysieling.com\/blog","nextItem":{"@type":"ListItem","@id":"https:\/\/www.garysieling.com\/blog\/category\/code-examples\/#listItem","name":"Code Examples"}},{"@type":"ListItem","@id":"https:\/\/www.garysieling.com\/blog\/category\/code-examples\/#listItem","position":2,"name":"Code Examples","item":"https:\/\/www.garysieling.com\/blog\/category\/code-examples\/","nextItem":{"@type":"ListItem","@id":"https:\/\/www.garysieling.com\/blog\/scala-foldleft-example\/#listItem","name":"Scala foldLeft example"},"previousItem":{"@type":"ListItem","@id":"https:\/\/www.garysieling.com\/blog#listItem","name":"Home"}},{"@type":"ListItem","@id":"https:\/\/www.garysieling.com\/blog\/scala-foldleft-example\/#listItem","position":3,"name":"Scala foldLeft example","previousItem":{"@type":"ListItem","@id":"https:\/\/www.garysieling.com\/blog\/category\/code-examples\/#listItem","name":"Code Examples"}}]},{"@type":"Organization","@id":"https:\/\/www.garysieling.com\/blog\/#organization","name":"Gary Sieling","description":"Software Engineer","url":"https:\/\/www.garysieling.com\/blog\/"},{"@type":"Person","@id":"https:\/\/www.garysieling.com\/blog\/author\/gary\/#author","url":"https:\/\/www.garysieling.com\/blog\/author\/gary\/","name":"gary","image":{"@type":"ImageObject","@id":"https:\/\/www.garysieling.com\/blog\/scala-foldleft-example\/#authorImage","url":"https:\/\/secure.gravatar.com\/avatar\/0be925276d848ffe98a6a9dc8cf33e67?s=96&d=identicon&r=g","width":96,"height":96,"caption":"gary"}},{"@type":"WebPage","@id":"https:\/\/www.garysieling.com\/blog\/scala-foldleft-example\/#webpage","url":"https:\/\/www.garysieling.com\/blog\/scala-foldleft-example\/","name":"Scala foldLeft example - Gary Sieling","description":"If you haven't seen curried functions before, the syntax for foldLeft looks pretty weird: List(1, 2, 3) .foldLeft(0)((x, y) => { x + y }) res108: Int = 6 The first foldLeft argument is the initial value (0), and the second is a function to combine two values (0 + 1, then 1 + 2,","inLanguage":"en-US","isPartOf":{"@id":"https:\/\/www.garysieling.com\/blog\/#website"},"breadcrumb":{"@id":"https:\/\/www.garysieling.com\/blog\/scala-foldleft-example\/#breadcrumblist"},"author":{"@id":"https:\/\/www.garysieling.com\/blog\/author\/gary\/#author"},"creator":{"@id":"https:\/\/www.garysieling.com\/blog\/author\/gary\/#author"},"datePublished":"2015-09-15T01:19:23+00:00","dateModified":"2015-09-15T01:19:23+00:00"},{"@type":"WebSite","@id":"https:\/\/www.garysieling.com\/blog\/#website","url":"https:\/\/www.garysieling.com\/blog\/","name":"Gary Sieling","description":"Software Engineer","inLanguage":"en-US","publisher":{"@id":"https:\/\/www.garysieling.com\/blog\/#organization"}}]},"og:locale":"en_US","og:site_name":"Gary Sieling - Software Engineer","og:type":"article","og:title":"Scala foldLeft example - Gary Sieling","og:description":"If you haven't seen curried functions before, the syntax for foldLeft looks pretty weird: List(1, 2, 3) .foldLeft(0)((x, y) =&gt; { x + y }) res108: Int = 6 The first foldLeft argument is the initial value (0), and the second is a function to combine two values (0 + 1, then 1 + 2,","og:url":"https:\/\/www.garysieling.com\/blog\/scala-foldleft-example\/","article:published_time":"2015-09-15T01:19:23+00:00","article:modified_time":"2015-09-15T01:19:23+00:00","twitter:card":"summary_large_image","twitter:title":"Scala foldLeft example - Gary Sieling","twitter:description":"If you haven't seen curried functions before, the syntax for foldLeft looks pretty weird: List(1, 2, 3) .foldLeft(0)((x, y) =&gt; { x + y }) res108: Int = 6 The first foldLeft argument is the initial value (0), and the second is a function to combine two values (0 + 1, then 1 + 2,"},"aioseo_meta_data":{"post_id":"2596","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":"default","schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"limit_modified_date":false,"created":"2023-02-04 16:30:38","updated":"2026-07-06 01:17:34","ai":null,"breadcrumb_settings":null,"seo_analyzer_scan_date":null},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/www.garysieling.com\/blog\" title=\"Home\">Home<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/www.garysieling.com\/blog\/category\/code-examples\/\" title=\"Code Examples\">Code Examples<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\tScala foldLeft example\n\t\t<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"https:\/\/www.garysieling.com\/blog"},{"label":"Code Examples","link":"https:\/\/www.garysieling.com\/blog\/category\/code-examples\/"},{"label":"Scala foldLeft example","link":"https:\/\/www.garysieling.com\/blog\/scala-foldleft-example\/"}],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.garysieling.com\/blog\/wp-json\/wp\/v2\/posts\/2596"}],"collection":[{"href":"https:\/\/www.garysieling.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.garysieling.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.garysieling.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.garysieling.com\/blog\/wp-json\/wp\/v2\/comments?post=2596"}],"version-history":[{"count":0,"href":"https:\/\/www.garysieling.com\/blog\/wp-json\/wp\/v2\/posts\/2596\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.garysieling.com\/blog\/wp-json\/wp\/v2\/media?parent=2596"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.garysieling.com\/blog\/wp-json\/wp\/v2\/categories?post=2596"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.garysieling.com\/blog\/wp-json\/wp\/v2\/tags?post=2596"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}