Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 8159609
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: June 6, 20262026-06-06T17:58:41+00:00 2026-06-06T17:58:41+00:00

How is this possible, what is going on there? Is there a name for

  • 0
  1. How is this possible, what is going on there?

  2. Is there a name for this?

  3. What other languages have this same behavior?

  4. Any without the strong typing system?

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-06-06T17:58:42+00:00Added an answer on June 6, 2026 at 5:58 pm

    This behaviour is really simple and intuitive if you look at the types. To avoid the complications of infix operators like +, I’m going to use the function plus instead. I’m also going to specialise plus to work only on Int, to reduce the typeclass line noise.

    Say we have a function plus, of type Int -> Int -> Int. One way to read that is “a function of two Ints that returns an Int“. But that notation is a little clumsy for that reading, isn’t it? The return type isn’t singled out specially anywhere. Why would we write function type signatures this way? Because the -> is right associative, an equivalent type would be Int -> (Int -> Int). This looks much more like it’s saying “a function from an Int to (a function from an Int to an Int)”. But those two types are in fact exactly the same, and the latter interpretation is the key to understanding how this behaviour works.

    Haskell views all functions as being from a single argument to a single result. There may be computations you have in mind where the result of the computation depends on two or more inputs (such as plus). Haskell says that the function plus is a function that takes a single input, and produces an output which is another function. This second function takes a single input and produces an output which is a number. Because the second function was computed by first (and will be different for different inputs to the first function), the “final” output can depend on both the inputs, so we can implement computations with multiple inputs with these functions that take only single inputs.

    I promised this would be really easy to understand if you looked at the types. Here’s some example expressions with their types explicitly annotated:

    plus       :: Int -> Int -> Int
    plus 2     ::        Int -> Int
    plus 2 3   ::               Int
    

    If something is a function and you apply it to an argument, to get the type of the result of that application all you need to do is remove everything up to the first arrow from the function’s type. If that leaves a type that has more arrows, then you still have a function! As you add arguments the right of an expression, you remove parameter types from the left of its type. The type makes it immediately clear what the type of all the intermediate results are, and why plus 2 is a function which can be further applied (its type has an arrow) and plus 2 3 is not (its type doesn’t have an arrow).

    “Currying” is the process of turning a function of two arguments into a function of one argument that returns a function of another argument that returns whatever the original function returned. It’s also used to refer to the property of languages like Haskell that automatically have all functions work this way; people will say that Haskell “is a curried language” or “has currying”, or “has curried functions”.

    Note that this works particularly elegantly because Haskell’s syntax for function application is simple token adjacency. You are free to read plus 2 3 as the application of plus to 2 arguments, or the application of plus to 2 and then the application of the result to 3; you can mentally model it whichever way most fits what you’re doing at the time.

    In languages with C-like function application by parenthesised argument list, this breaks down a bit. plus(2, 3) is very different from plus(2)(3), and in languages with this syntax the two versions of plus involved would probably have different types. So languages with that kind of syntax tend not to have all functions be curried all the time, or even to have automatic currying of any function you like. But such languages have historically also tended not to have functions as first class values, which makes the lack of currying a moot point.

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

Without going into whether this is a good or bad idea: Is it possible
Is this possible at all? The idea is to have the following: if ($some_statement)
Without going into detail about what I'm trying to achieve, is it possible (and
I have 2 tables...they are basically the same except for the column name in
I have an application thats going to use Active Directory for Authentication. This will
Is this possible to use Ajax.Beginform with update target inside of ajax form. like
Is this possible if I click on an anchor link to simulate as if
Is this possible? My code works on Firefox. I can also get webkit to
Is this possible? function testObj(testArg) { //Do obj stuff here } testObj.prototype.addFn = function()
Is this possible? I know how to do it from your own wall but

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.