<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/a-case-against-currying-pmzu0recm" -->

---
title: A Case Against Currying | daily.dev
description: Curried functions are a staple of functional programming, often justified by enabling elegant partial application. However, the tuple style (passing multiple...
canonical: https://daily.dev/posts/a-case-against-currying-pmzu0recm
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: A Case Against Currying | daily.dev
og:description: Curried functions are a staple of functional programming, often justified by enabling elegant partial application. However, the tuple style (passing multiple...
og:url: https://daily.dev/posts/a-case-against-currying-pmzu0recm
og:image: https://api.daily.dev/og/posts/PMZu0REcm.png
og:image:alt: A Case Against Currying
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# A Case Against Currying

**[Hacker News](https://daily.dev/sources/hn)** · 12 min read · 0 upvotes · 0 comments

## Summary

Curried functions are a staple of functional programming, often justified by enabling elegant partial application. However, the tuple style (passing multiple parameters as a single tuple) is argued to be a viable and often clearer alternative. Partial application is not exclusive to currying — a 'hole operator' syntax can achieve the same with tuple-style functions, sometimes more readably. Curried function types also have an asymmetric shape (inputs staggered, outputs tupled) that causes friction when composing with higher-order functions like `map`, requiring explicit `uncurry` calls. A real-world example from a Rocq proof assistant project illustrates this pain. The one area where currying has a genuine edge is dependently typed languages, where dependent tuples become unwieldy. The conclusion is not to abolish currying but to consider the tuple style more seriously, especially in new language design.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://emi-h.com/articles/a-case-against-currying.html>

## Similar posts on daily.dev

- [Why JavaScript Currying Feels Confusing \(Until It Clicks\)](https://daily.dev/posts/why-javascript-currying-feels-confusing-until-it-clicks--aqsjaqlj7) · Medium · 0 upvotes · 0 comments
- [Type systems are leaky abstractions: the case of Map.take\!/2](https://daily.dev/posts/type-systems-are-leaky-abstractions-the-case-of-map-take-2-5wbmgto0e) · Dashbit · 0 upvotes · 0 comments

---

Tags: [#functional-programming](https://daily.dev/tags/functional-programming), [#haskell](https://daily.dev/tags/haskell)

[View this post on daily.dev](https://daily.dev/posts/a-case-against-currying-pmzu0recm)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"A Case Against Currying","url":"https://daily.dev/posts/a-case-against-currying-pmzu0recm","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/a-case-against-currying-pmzu0recm"},"datePublished":"2026-03-22T22:01:28.889Z","dateModified":"2026-03-22T22:01:55.622Z","description":"Curried functions are a staple of functional programming, often justified by enabling elegant partial application. However, the tuple style (passing multiple...","image":"https://media.daily.dev/image/upload/s--CxzD6vbw--/f_auto/v1722860399/public/Placeholder%2005","thumbnailUrl":"https://media.daily.dev/image/upload/s--CxzD6vbw--/f_auto/v1722860399/public/Placeholder%2005","isAccessibleForFree":true,"articleSection":"Hacker News","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"Hacker News","logo":"https://media.daily.dev/image/upload/t_logo,f_auto/v1/logos/hn","url":"https://daily.dev/sources/hn"},"commentCount":0,"discussionUrl":"https://daily.dev/posts/a-case-against-currying-pmzu0recm","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":0},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"keywords":"functional-programming,haskell","timeRequired":"PT12M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"Hacker News","item":"https://daily.dev/sources/hn"},{"@type":"ListItem","position":3,"name":"A Case Against Currying"}]}
```

