{"id":2669,"date":"2015-09-23T01:42:57","date_gmt":"2015-09-23T01:42:57","guid":{"rendered":"http:\/\/www.garysieling.com\/blog\/?p=2669"},"modified":"2015-09-23T01:42:57","modified_gmt":"2015-09-23T01:42:57","slug":"fixing-scala-error-error-recursive-value-count-needs-type","status":"publish","type":"post","link":"https:\/\/www.garysieling.com\/blog\/fixing-scala-error-error-recursive-value-count-needs-type\/","title":{"rendered":"Fixing scala error &#8220;error: recursive value count needs type&#8221;"},"content":{"rendered":"<p>If you try to define a recursive function without a type, you will get this error:<\/p>\n<pre>\nerror: recursive value count needs type\n<\/pre>\n<p>For example, note how this &#8220;count&#8221; value doesn&#8217;t have a type:<\/p>\n<pre lang=\"scala\">\nval count = \n  (values: Seq[Any]) => { \n    values.headOption match { \n      case Some(_) => 1 + count(values.tail) \n      case None => 0 \n    }\n  }\n<\/pre>\n<p>The fix is fairly simple (although the type is hard to read):<\/p>\n<pre lang=\"scala\">\nval count: (Seq[Any]) => Int = \n  ...\n<\/pre>\n<p>I found in doing this that I had to switch from &#8220;Seq&#8221; to &#8220;Seq[Any]&#8221;. The &#8220;=>&#8221; differentiates the arguments (on the left, in parens) from the return type (on the right). The reason for this is that the type inference algorithm isn&#8217;t set up to handle this &#8211; while this is a simple example, recursion that bounces back and forth between two functions is likely too much for the compiler to handle, especially when you might be returning different types through many paths.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>If you try to define a recursive function without a type, you will get this error: error: recursive value count needs type For example, note how this &#8220;count&#8221; value doesn&#8217;t have a type: val count = (values: Seq[Any]) => { values.headOption match { case Some(_) => 1 + count(values.tail) case None => 0 } } &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/www.garysieling.com\/blog\/fixing-scala-error-error-recursive-value-count-needs-type\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;Fixing scala error &#8220;error: recursive value count needs type&#8221;&#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":[9],"tags":[480,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 try to define a recursive function without a type, you will get this error: error: recursive value count needs type For example, note how this &quot;count&quot; value doesn&#039;t have a type: val count = (values: Seq[Any]) =&gt; { values.headOption match { case Some(_) =&gt; 1 + count(values.tail) case None =&gt; 0 } }\" \/>\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\/fixing-scala-error-error-recursive-value-count-needs-type\/\" \/>\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=\"Fixing scala error \u201cerror: recursive value count needs type\u201d - Gary Sieling\" \/>\n\t\t<meta property=\"og:description\" content=\"If you try to define a recursive function without a type, you will get this error: error: recursive value count needs type For example, note how this &quot;count&quot; value doesn&#039;t have a type: val count = (values: Seq[Any]) =&gt; { values.headOption match { case Some(_) =&gt; 1 + count(values.tail) case None =&gt; 0 } }\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/www.garysieling.com\/blog\/fixing-scala-error-error-recursive-value-count-needs-type\/\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2015-09-23T01:42:57+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2015-09-23T01:42:57+00:00\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n\t\t<meta name=\"twitter:title\" content=\"Fixing scala error \u201cerror: recursive value count needs type\u201d - Gary Sieling\" \/>\n\t\t<meta name=\"twitter:description\" content=\"If you try to define a recursive function without a type, you will get this error: error: recursive value count needs type For example, note how this &quot;count&quot; value doesn&#039;t have a type: val count = (values: Seq[Any]) =&gt; { values.headOption match { case Some(_) =&gt; 1 + count(values.tail) case None =&gt; 0 } }\" \/>\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\\\/fixing-scala-error-error-recursive-value-count-needs-type\\\/#blogposting\",\"name\":\"Fixing scala error \\u201cerror: recursive value count needs type\\u201d - Gary Sieling\",\"headline\":\"Fixing scala error &#8220;error: recursive value count needs type&#8221;\",\"author\":{\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/author\\\/gary\\\/#author\"},\"publisher\":{\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/#organization\"},\"datePublished\":\"2015-09-23T01:42:57+00:00\",\"dateModified\":\"2015-09-23T01:42:57+00:00\",\"inLanguage\":\"en-US\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/fixing-scala-error-error-recursive-value-count-needs-type\\\/#webpage\"},\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/fixing-scala-error-error-recursive-value-count-needs-type\\\/#webpage\"},\"articleSection\":\"Errors, scala, scala-reference\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/fixing-scala-error-error-recursive-value-count-needs-type\\\/#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\\\/errors\\\/#listItem\",\"name\":\"Errors\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/category\\\/errors\\\/#listItem\",\"position\":2,\"name\":\"Errors\",\"item\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/category\\\/errors\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/fixing-scala-error-error-recursive-value-count-needs-type\\\/#listItem\",\"name\":\"Fixing scala error &#8220;error: recursive value count needs type&#8221;\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog#listItem\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/fixing-scala-error-error-recursive-value-count-needs-type\\\/#listItem\",\"position\":3,\"name\":\"Fixing scala error &#8220;error: recursive value count needs type&#8221;\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/category\\\/errors\\\/#listItem\",\"name\":\"Errors\"}}]},{\"@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\\\/fixing-scala-error-error-recursive-value-count-needs-type\\\/#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\\\/fixing-scala-error-error-recursive-value-count-needs-type\\\/#webpage\",\"url\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/fixing-scala-error-error-recursive-value-count-needs-type\\\/\",\"name\":\"Fixing scala error \\u201cerror: recursive value count needs type\\u201d - Gary Sieling\",\"description\":\"If you try to define a recursive function without a type, you will get this error: error: recursive value count needs type For example, note how this \\\"count\\\" value doesn't have a type: val count = (values: Seq[Any]) => { values.headOption match { case Some(_) => 1 + count(values.tail) case None => 0 } }\",\"inLanguage\":\"en-US\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/fixing-scala-error-error-recursive-value-count-needs-type\\\/#breadcrumblist\"},\"author\":{\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/author\\\/gary\\\/#author\"},\"creator\":{\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/author\\\/gary\\\/#author\"},\"datePublished\":\"2015-09-23T01:42:57+00:00\",\"dateModified\":\"2015-09-23T01:42:57+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":"Fixing scala error \u201cerror: recursive value count needs type\u201d - Gary Sieling","description":"If you try to define a recursive function without a type, you will get this error: error: recursive value count needs type For example, note how this \"count\" value doesn't have a type: val count = (values: Seq[Any]) => { values.headOption match { case Some(_) => 1 + count(values.tail) case None => 0 } }","canonical_url":"https:\/\/www.garysieling.com\/blog\/fixing-scala-error-error-recursive-value-count-needs-type\/","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"BlogPosting","@id":"https:\/\/www.garysieling.com\/blog\/fixing-scala-error-error-recursive-value-count-needs-type\/#blogposting","name":"Fixing scala error \u201cerror: recursive value count needs type\u201d - Gary Sieling","headline":"Fixing scala error &#8220;error: recursive value count needs type&#8221;","author":{"@id":"https:\/\/www.garysieling.com\/blog\/author\/gary\/#author"},"publisher":{"@id":"https:\/\/www.garysieling.com\/blog\/#organization"},"datePublished":"2015-09-23T01:42:57+00:00","dateModified":"2015-09-23T01:42:57+00:00","inLanguage":"en-US","mainEntityOfPage":{"@id":"https:\/\/www.garysieling.com\/blog\/fixing-scala-error-error-recursive-value-count-needs-type\/#webpage"},"isPartOf":{"@id":"https:\/\/www.garysieling.com\/blog\/fixing-scala-error-error-recursive-value-count-needs-type\/#webpage"},"articleSection":"Errors, scala, scala-reference"},{"@type":"BreadcrumbList","@id":"https:\/\/www.garysieling.com\/blog\/fixing-scala-error-error-recursive-value-count-needs-type\/#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\/errors\/#listItem","name":"Errors"}},{"@type":"ListItem","@id":"https:\/\/www.garysieling.com\/blog\/category\/errors\/#listItem","position":2,"name":"Errors","item":"https:\/\/www.garysieling.com\/blog\/category\/errors\/","nextItem":{"@type":"ListItem","@id":"https:\/\/www.garysieling.com\/blog\/fixing-scala-error-error-recursive-value-count-needs-type\/#listItem","name":"Fixing scala error &#8220;error: recursive value count needs type&#8221;"},"previousItem":{"@type":"ListItem","@id":"https:\/\/www.garysieling.com\/blog#listItem","name":"Home"}},{"@type":"ListItem","@id":"https:\/\/www.garysieling.com\/blog\/fixing-scala-error-error-recursive-value-count-needs-type\/#listItem","position":3,"name":"Fixing scala error &#8220;error: recursive value count needs type&#8221;","previousItem":{"@type":"ListItem","@id":"https:\/\/www.garysieling.com\/blog\/category\/errors\/#listItem","name":"Errors"}}]},{"@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\/fixing-scala-error-error-recursive-value-count-needs-type\/#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\/fixing-scala-error-error-recursive-value-count-needs-type\/#webpage","url":"https:\/\/www.garysieling.com\/blog\/fixing-scala-error-error-recursive-value-count-needs-type\/","name":"Fixing scala error \u201cerror: recursive value count needs type\u201d - Gary Sieling","description":"If you try to define a recursive function without a type, you will get this error: error: recursive value count needs type For example, note how this \"count\" value doesn't have a type: val count = (values: Seq[Any]) => { values.headOption match { case Some(_) => 1 + count(values.tail) case None => 0 } }","inLanguage":"en-US","isPartOf":{"@id":"https:\/\/www.garysieling.com\/blog\/#website"},"breadcrumb":{"@id":"https:\/\/www.garysieling.com\/blog\/fixing-scala-error-error-recursive-value-count-needs-type\/#breadcrumblist"},"author":{"@id":"https:\/\/www.garysieling.com\/blog\/author\/gary\/#author"},"creator":{"@id":"https:\/\/www.garysieling.com\/blog\/author\/gary\/#author"},"datePublished":"2015-09-23T01:42:57+00:00","dateModified":"2015-09-23T01:42:57+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":"Fixing scala error \u201cerror: recursive value count needs type\u201d - Gary Sieling","og:description":"If you try to define a recursive function without a type, you will get this error: error: recursive value count needs type For example, note how this &quot;count&quot; value doesn't have a type: val count = (values: Seq[Any]) =&gt; { values.headOption match { case Some(_) =&gt; 1 + count(values.tail) case None =&gt; 0 } }","og:url":"https:\/\/www.garysieling.com\/blog\/fixing-scala-error-error-recursive-value-count-needs-type\/","article:published_time":"2015-09-23T01:42:57+00:00","article:modified_time":"2015-09-23T01:42:57+00:00","twitter:card":"summary_large_image","twitter:title":"Fixing scala error \u201cerror: recursive value count needs type\u201d - Gary Sieling","twitter:description":"If you try to define a recursive function without a type, you will get this error: error: recursive value count needs type For example, note how this &quot;count&quot; value doesn't have a type: val count = (values: Seq[Any]) =&gt; { values.headOption match { case Some(_) =&gt; 1 + count(values.tail) case None =&gt; 0 } }"},"aioseo_meta_data":{"post_id":"2669","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:32:30","updated":"2026-07-06 01:20:54","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\/errors\/\" title=\"Errors\">Errors<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\tFixing scala error \u201cerror: recursive value count needs type\u201d\n\t\t<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"https:\/\/www.garysieling.com\/blog"},{"label":"Errors","link":"https:\/\/www.garysieling.com\/blog\/category\/errors\/"},{"label":"Fixing scala error &#8220;error: recursive value count needs type&#8221;","link":"https:\/\/www.garysieling.com\/blog\/fixing-scala-error-error-recursive-value-count-needs-type\/"}],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.garysieling.com\/blog\/wp-json\/wp\/v2\/posts\/2669"}],"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=2669"}],"version-history":[{"count":0,"href":"https:\/\/www.garysieling.com\/blog\/wp-json\/wp\/v2\/posts\/2669\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.garysieling.com\/blog\/wp-json\/wp\/v2\/media?parent=2669"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.garysieling.com\/blog\/wp-json\/wp\/v2\/categories?post=2669"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.garysieling.com\/blog\/wp-json\/wp\/v2\/tags?post=2669"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}