How to make a function composer
Clash Royale CLAN TAG#URR8PPP
up vote
6
down vote
favorite
I am trying to make a function that rounds other functions for my university degree . For example I would like to call the round_sqrt = round(sqrt)
and when i call the round_sqrt(5) it has to shows me 2 instead of 2.23606797749979. What I am trying is this one:
def rounding(funct):
return round(funct)
but this doesnt work. Can anyone help me with this one?
Any help will be appreciated:)
EDIT: The function should have only one parameter. For example
the start of the function should be
def rounding(func):
so in this function i have to make the func fuction to be rounded.
so when I call the rounding(abs)(3.2) it has to shows me 3
python python-3.x python-decorators function-composition
add a comment |Â
up vote
6
down vote
favorite
I am trying to make a function that rounds other functions for my university degree . For example I would like to call the round_sqrt = round(sqrt)
and when i call the round_sqrt(5) it has to shows me 2 instead of 2.23606797749979. What I am trying is this one:
def rounding(funct):
return round(funct)
but this doesnt work. Can anyone help me with this one?
Any help will be appreciated:)
EDIT: The function should have only one parameter. For example
the start of the function should be
def rounding(func):
so in this function i have to make the func fuction to be rounded.
so when I call the rounding(abs)(3.2) it has to shows me 3
python python-3.x python-decorators function-composition
2
You are looking for function composition. Mathematically,h = f â g
is defined ash(x) = f(g(x))
. While it would be nice if Python a composition operator were available in Python, practical concerns require you to define the composed function yourself.
â chepner
18 mins ago
2
playing with composition is one of the reasons I quickly fell in love with (then hated, then fell in love with, then hated, then...) Haskell.
â Adam Smith
13 mins ago
Haskell is easy because everything fits into a theoretically sound mathematical framework. Haskell is hard because we are aren't use to conforming to said framework. :)
â chepner
3 mins ago
You can either leave the question to help other people or delete it, but please don't just remove all the content.
â Alex
2 mins ago
add a comment |Â
up vote
6
down vote
favorite
up vote
6
down vote
favorite
I am trying to make a function that rounds other functions for my university degree . For example I would like to call the round_sqrt = round(sqrt)
and when i call the round_sqrt(5) it has to shows me 2 instead of 2.23606797749979. What I am trying is this one:
def rounding(funct):
return round(funct)
but this doesnt work. Can anyone help me with this one?
Any help will be appreciated:)
EDIT: The function should have only one parameter. For example
the start of the function should be
def rounding(func):
so in this function i have to make the func fuction to be rounded.
so when I call the rounding(abs)(3.2) it has to shows me 3
python python-3.x python-decorators function-composition
I am trying to make a function that rounds other functions for my university degree . For example I would like to call the round_sqrt = round(sqrt)
and when i call the round_sqrt(5) it has to shows me 2 instead of 2.23606797749979. What I am trying is this one:
def rounding(funct):
return round(funct)
but this doesnt work. Can anyone help me with this one?
Any help will be appreciated:)
EDIT: The function should have only one parameter. For example
the start of the function should be
def rounding(func):
so in this function i have to make the func fuction to be rounded.
so when I call the rounding(abs)(3.2) it has to shows me 3
python python-3.x python-decorators function-composition
python python-3.x python-decorators function-composition
edited 12 secs ago
asked 24 mins ago
php kubrick
333
333
2
You are looking for function composition. Mathematically,h = f â g
is defined ash(x) = f(g(x))
. While it would be nice if Python a composition operator were available in Python, practical concerns require you to define the composed function yourself.
â chepner
18 mins ago
2
playing with composition is one of the reasons I quickly fell in love with (then hated, then fell in love with, then hated, then...) Haskell.
â Adam Smith
13 mins ago
Haskell is easy because everything fits into a theoretically sound mathematical framework. Haskell is hard because we are aren't use to conforming to said framework. :)
â chepner
3 mins ago
You can either leave the question to help other people or delete it, but please don't just remove all the content.
â Alex
2 mins ago
add a comment |Â
2
You are looking for function composition. Mathematically,h = f â g
is defined ash(x) = f(g(x))
. While it would be nice if Python a composition operator were available in Python, practical concerns require you to define the composed function yourself.
â chepner
18 mins ago
2
playing with composition is one of the reasons I quickly fell in love with (then hated, then fell in love with, then hated, then...) Haskell.
â Adam Smith
13 mins ago
Haskell is easy because everything fits into a theoretically sound mathematical framework. Haskell is hard because we are aren't use to conforming to said framework. :)
â chepner
3 mins ago
You can either leave the question to help other people or delete it, but please don't just remove all the content.
â Alex
2 mins ago
2
2
You are looking for function composition. Mathematically,
h = f â g
is defined as h(x) = f(g(x))
. While it would be nice if Python a composition operator were available in Python, practical concerns require you to define the composed function yourself.â chepner
18 mins ago
You are looking for function composition. Mathematically,
h = f â g
is defined as h(x) = f(g(x))
. While it would be nice if Python a composition operator were available in Python, practical concerns require you to define the composed function yourself.â chepner
18 mins ago
2
2
playing with composition is one of the reasons I quickly fell in love with (then hated, then fell in love with, then hated, then...) Haskell.
â Adam Smith
13 mins ago
playing with composition is one of the reasons I quickly fell in love with (then hated, then fell in love with, then hated, then...) Haskell.
â Adam Smith
13 mins ago
Haskell is easy because everything fits into a theoretically sound mathematical framework. Haskell is hard because we are aren't use to conforming to said framework. :)
â chepner
3 mins ago
Haskell is easy because everything fits into a theoretically sound mathematical framework. Haskell is hard because we are aren't use to conforming to said framework. :)
â chepner
3 mins ago
You can either leave the question to help other people or delete it, but please don't just remove all the content.
â Alex
2 mins ago
You can either leave the question to help other people or delete it, but please don't just remove all the content.
â Alex
2 mins ago
add a comment |Â
3 Answers
3
active
oldest
votes
up vote
2
down vote
accepted
For your specific example, you can write
def round_sqrt(x):
return round(sqrt(x))
Alex's answer generalizes this; he defines a function that creates round_sqrt
for you. If the function is already defined, you just pass it as an argument to rounder
:
round_sqrt = rounder(sqrt)
Of course, you don't need to define round_sqrt
if you don't want to. rounder(sqrt)(3.2)
can be called directly, although it's far more efficient to safe the return value of rounder
if you expect to use it multiple times, rather than redefining it each time.
Otherwise, the decorator syntax is just short for (using Alex's example)
def adder(x, y):
return x + y
adder = rounder(adder)
As I said in my comment, this is an example of implementing composition. Mathematically, composition is simple, because mathematical functions always take a single argument and return a single argument. As such, the composition of two functions f
and g
could always be defined simply as
def compose(f, g):
def h(x): # The name doesn't matter
return f(g(x))
return h
Then
round_sqrt = compose(round, sqrt)
(Ignoring all sorts of practical concerns around the implementation, Python could in theory even provide a Unicode operator âÂÂ
for functions: round_sqrt = round â sort
. Explaining why this won't happen is beyond the scope of this answer.)
In Python, though, functions are far more complicated. They can take multiple arguments, they can accept arbitrary numbers of arguments and arbitrary keyword arguments, and while each technically returns a single value, that value can be a tuple which is thought of as multiple values or a dict
. As a result, there may be many ways you might expect to pass the return value of g
to a function f
, more than can easily be accommodated in a simple compose
function.
Shouldn'treturn f(g(z))
bereturn f(g(x))
?
â slider
3 mins ago
Yeah, I don't know wherez
came from.
â chepner
2 mins ago
add a comment |Â
up vote
9
down vote
You should check out closures:
def rounder(func):
def inner(*args, **kwargs):
return round(func(*args, **kwargs))
return inner
Then you can decorate functions using the @
character:
@rounder
def adder(x, y):
return x + y
print(adder(1.1, 2.2))
outputs 3
Supplementary:
- You can use
functools.wraps
in your closure so you don't lose information (e.g. docstring, function name) about the original function. - There are a bunch of resources for learning about closures (e.g. 1, 2) and decorators (e.g. 1, 2) that you can find by Googling those terms.
6
Hey look, a decorator!
â Adam Smith
20 mins ago
I cant understand anything. The answer should be more easier I think
â php kubrick
17 mins ago
@phpkubrick what? It's 3 lines of code and a function header? How much more simple would you like it? You mentioned you're in university -- you can understand this.
â Adam Smith
17 mins ago
I cant understand the *args, **kwargs
â php kubrick
16 mins ago
@phpkubrick I guess that's the next bit of research you should do then, because they're used all over the place in Python and are incredibly useful. stackoverflow.com/questions/36901/â¦
â Adam Smith
15 mins ago
 |Â
show 2 more comments
up vote
0
down vote
Function composition isn't supported natively in Python. You can use a decorator as per @Alex's solution. You can define a new function explicitly as per @chepner's solution.
Or you can use a 3rd party library. For example, via toolz.compose
:
from toolz import compose
def adder(x, y):
return x + y
round_adder = compose(round, adder)
round_adder(1.1, 2.2) # 3
add a comment |Â
3 Answers
3
active
oldest
votes
3 Answers
3
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
2
down vote
accepted
For your specific example, you can write
def round_sqrt(x):
return round(sqrt(x))
Alex's answer generalizes this; he defines a function that creates round_sqrt
for you. If the function is already defined, you just pass it as an argument to rounder
:
round_sqrt = rounder(sqrt)
Of course, you don't need to define round_sqrt
if you don't want to. rounder(sqrt)(3.2)
can be called directly, although it's far more efficient to safe the return value of rounder
if you expect to use it multiple times, rather than redefining it each time.
Otherwise, the decorator syntax is just short for (using Alex's example)
def adder(x, y):
return x + y
adder = rounder(adder)
As I said in my comment, this is an example of implementing composition. Mathematically, composition is simple, because mathematical functions always take a single argument and return a single argument. As such, the composition of two functions f
and g
could always be defined simply as
def compose(f, g):
def h(x): # The name doesn't matter
return f(g(x))
return h
Then
round_sqrt = compose(round, sqrt)
(Ignoring all sorts of practical concerns around the implementation, Python could in theory even provide a Unicode operator âÂÂ
for functions: round_sqrt = round â sort
. Explaining why this won't happen is beyond the scope of this answer.)
In Python, though, functions are far more complicated. They can take multiple arguments, they can accept arbitrary numbers of arguments and arbitrary keyword arguments, and while each technically returns a single value, that value can be a tuple which is thought of as multiple values or a dict
. As a result, there may be many ways you might expect to pass the return value of g
to a function f
, more than can easily be accommodated in a simple compose
function.
Shouldn'treturn f(g(z))
bereturn f(g(x))
?
â slider
3 mins ago
Yeah, I don't know wherez
came from.
â chepner
2 mins ago
add a comment |Â
up vote
2
down vote
accepted
For your specific example, you can write
def round_sqrt(x):
return round(sqrt(x))
Alex's answer generalizes this; he defines a function that creates round_sqrt
for you. If the function is already defined, you just pass it as an argument to rounder
:
round_sqrt = rounder(sqrt)
Of course, you don't need to define round_sqrt
if you don't want to. rounder(sqrt)(3.2)
can be called directly, although it's far more efficient to safe the return value of rounder
if you expect to use it multiple times, rather than redefining it each time.
Otherwise, the decorator syntax is just short for (using Alex's example)
def adder(x, y):
return x + y
adder = rounder(adder)
As I said in my comment, this is an example of implementing composition. Mathematically, composition is simple, because mathematical functions always take a single argument and return a single argument. As such, the composition of two functions f
and g
could always be defined simply as
def compose(f, g):
def h(x): # The name doesn't matter
return f(g(x))
return h
Then
round_sqrt = compose(round, sqrt)
(Ignoring all sorts of practical concerns around the implementation, Python could in theory even provide a Unicode operator âÂÂ
for functions: round_sqrt = round â sort
. Explaining why this won't happen is beyond the scope of this answer.)
In Python, though, functions are far more complicated. They can take multiple arguments, they can accept arbitrary numbers of arguments and arbitrary keyword arguments, and while each technically returns a single value, that value can be a tuple which is thought of as multiple values or a dict
. As a result, there may be many ways you might expect to pass the return value of g
to a function f
, more than can easily be accommodated in a simple compose
function.
Shouldn'treturn f(g(z))
bereturn f(g(x))
?
â slider
3 mins ago
Yeah, I don't know wherez
came from.
â chepner
2 mins ago
add a comment |Â
up vote
2
down vote
accepted
up vote
2
down vote
accepted
For your specific example, you can write
def round_sqrt(x):
return round(sqrt(x))
Alex's answer generalizes this; he defines a function that creates round_sqrt
for you. If the function is already defined, you just pass it as an argument to rounder
:
round_sqrt = rounder(sqrt)
Of course, you don't need to define round_sqrt
if you don't want to. rounder(sqrt)(3.2)
can be called directly, although it's far more efficient to safe the return value of rounder
if you expect to use it multiple times, rather than redefining it each time.
Otherwise, the decorator syntax is just short for (using Alex's example)
def adder(x, y):
return x + y
adder = rounder(adder)
As I said in my comment, this is an example of implementing composition. Mathematically, composition is simple, because mathematical functions always take a single argument and return a single argument. As such, the composition of two functions f
and g
could always be defined simply as
def compose(f, g):
def h(x): # The name doesn't matter
return f(g(x))
return h
Then
round_sqrt = compose(round, sqrt)
(Ignoring all sorts of practical concerns around the implementation, Python could in theory even provide a Unicode operator âÂÂ
for functions: round_sqrt = round â sort
. Explaining why this won't happen is beyond the scope of this answer.)
In Python, though, functions are far more complicated. They can take multiple arguments, they can accept arbitrary numbers of arguments and arbitrary keyword arguments, and while each technically returns a single value, that value can be a tuple which is thought of as multiple values or a dict
. As a result, there may be many ways you might expect to pass the return value of g
to a function f
, more than can easily be accommodated in a simple compose
function.
For your specific example, you can write
def round_sqrt(x):
return round(sqrt(x))
Alex's answer generalizes this; he defines a function that creates round_sqrt
for you. If the function is already defined, you just pass it as an argument to rounder
:
round_sqrt = rounder(sqrt)
Of course, you don't need to define round_sqrt
if you don't want to. rounder(sqrt)(3.2)
can be called directly, although it's far more efficient to safe the return value of rounder
if you expect to use it multiple times, rather than redefining it each time.
Otherwise, the decorator syntax is just short for (using Alex's example)
def adder(x, y):
return x + y
adder = rounder(adder)
As I said in my comment, this is an example of implementing composition. Mathematically, composition is simple, because mathematical functions always take a single argument and return a single argument. As such, the composition of two functions f
and g
could always be defined simply as
def compose(f, g):
def h(x): # The name doesn't matter
return f(g(x))
return h
Then
round_sqrt = compose(round, sqrt)
(Ignoring all sorts of practical concerns around the implementation, Python could in theory even provide a Unicode operator âÂÂ
for functions: round_sqrt = round â sort
. Explaining why this won't happen is beyond the scope of this answer.)
In Python, though, functions are far more complicated. They can take multiple arguments, they can accept arbitrary numbers of arguments and arbitrary keyword arguments, and while each technically returns a single value, that value can be a tuple which is thought of as multiple values or a dict
. As a result, there may be many ways you might expect to pass the return value of g
to a function f
, more than can easily be accommodated in a simple compose
function.
edited 2 mins ago
answered 14 mins ago
chepner
236k29222317
236k29222317
Shouldn'treturn f(g(z))
bereturn f(g(x))
?
â slider
3 mins ago
Yeah, I don't know wherez
came from.
â chepner
2 mins ago
add a comment |Â
Shouldn'treturn f(g(z))
bereturn f(g(x))
?
â slider
3 mins ago
Yeah, I don't know wherez
came from.
â chepner
2 mins ago
Shouldn't
return f(g(z))
be return f(g(x))
?â slider
3 mins ago
Shouldn't
return f(g(z))
be return f(g(x))
?â slider
3 mins ago
Yeah, I don't know where
z
came from.â chepner
2 mins ago
Yeah, I don't know where
z
came from.â chepner
2 mins ago
add a comment |Â
up vote
9
down vote
You should check out closures:
def rounder(func):
def inner(*args, **kwargs):
return round(func(*args, **kwargs))
return inner
Then you can decorate functions using the @
character:
@rounder
def adder(x, y):
return x + y
print(adder(1.1, 2.2))
outputs 3
Supplementary:
- You can use
functools.wraps
in your closure so you don't lose information (e.g. docstring, function name) about the original function. - There are a bunch of resources for learning about closures (e.g. 1, 2) and decorators (e.g. 1, 2) that you can find by Googling those terms.
6
Hey look, a decorator!
â Adam Smith
20 mins ago
I cant understand anything. The answer should be more easier I think
â php kubrick
17 mins ago
@phpkubrick what? It's 3 lines of code and a function header? How much more simple would you like it? You mentioned you're in university -- you can understand this.
â Adam Smith
17 mins ago
I cant understand the *args, **kwargs
â php kubrick
16 mins ago
@phpkubrick I guess that's the next bit of research you should do then, because they're used all over the place in Python and are incredibly useful. stackoverflow.com/questions/36901/â¦
â Adam Smith
15 mins ago
 |Â
show 2 more comments
up vote
9
down vote
You should check out closures:
def rounder(func):
def inner(*args, **kwargs):
return round(func(*args, **kwargs))
return inner
Then you can decorate functions using the @
character:
@rounder
def adder(x, y):
return x + y
print(adder(1.1, 2.2))
outputs 3
Supplementary:
- You can use
functools.wraps
in your closure so you don't lose information (e.g. docstring, function name) about the original function. - There are a bunch of resources for learning about closures (e.g. 1, 2) and decorators (e.g. 1, 2) that you can find by Googling those terms.
6
Hey look, a decorator!
â Adam Smith
20 mins ago
I cant understand anything. The answer should be more easier I think
â php kubrick
17 mins ago
@phpkubrick what? It's 3 lines of code and a function header? How much more simple would you like it? You mentioned you're in university -- you can understand this.
â Adam Smith
17 mins ago
I cant understand the *args, **kwargs
â php kubrick
16 mins ago
@phpkubrick I guess that's the next bit of research you should do then, because they're used all over the place in Python and are incredibly useful. stackoverflow.com/questions/36901/â¦
â Adam Smith
15 mins ago
 |Â
show 2 more comments
up vote
9
down vote
up vote
9
down vote
You should check out closures:
def rounder(func):
def inner(*args, **kwargs):
return round(func(*args, **kwargs))
return inner
Then you can decorate functions using the @
character:
@rounder
def adder(x, y):
return x + y
print(adder(1.1, 2.2))
outputs 3
Supplementary:
- You can use
functools.wraps
in your closure so you don't lose information (e.g. docstring, function name) about the original function. - There are a bunch of resources for learning about closures (e.g. 1, 2) and decorators (e.g. 1, 2) that you can find by Googling those terms.
You should check out closures:
def rounder(func):
def inner(*args, **kwargs):
return round(func(*args, **kwargs))
return inner
Then you can decorate functions using the @
character:
@rounder
def adder(x, y):
return x + y
print(adder(1.1, 2.2))
outputs 3
Supplementary:
- You can use
functools.wraps
in your closure so you don't lose information (e.g. docstring, function name) about the original function. - There are a bunch of resources for learning about closures (e.g. 1, 2) and decorators (e.g. 1, 2) that you can find by Googling those terms.
edited 12 mins ago
answered 22 mins ago
Alex
9,45422252
9,45422252
6
Hey look, a decorator!
â Adam Smith
20 mins ago
I cant understand anything. The answer should be more easier I think
â php kubrick
17 mins ago
@phpkubrick what? It's 3 lines of code and a function header? How much more simple would you like it? You mentioned you're in university -- you can understand this.
â Adam Smith
17 mins ago
I cant understand the *args, **kwargs
â php kubrick
16 mins ago
@phpkubrick I guess that's the next bit of research you should do then, because they're used all over the place in Python and are incredibly useful. stackoverflow.com/questions/36901/â¦
â Adam Smith
15 mins ago
 |Â
show 2 more comments
6
Hey look, a decorator!
â Adam Smith
20 mins ago
I cant understand anything. The answer should be more easier I think
â php kubrick
17 mins ago
@phpkubrick what? It's 3 lines of code and a function header? How much more simple would you like it? You mentioned you're in university -- you can understand this.
â Adam Smith
17 mins ago
I cant understand the *args, **kwargs
â php kubrick
16 mins ago
@phpkubrick I guess that's the next bit of research you should do then, because they're used all over the place in Python and are incredibly useful. stackoverflow.com/questions/36901/â¦
â Adam Smith
15 mins ago
6
6
Hey look, a decorator!
â Adam Smith
20 mins ago
Hey look, a decorator!
â Adam Smith
20 mins ago
I cant understand anything. The answer should be more easier I think
â php kubrick
17 mins ago
I cant understand anything. The answer should be more easier I think
â php kubrick
17 mins ago
@phpkubrick what? It's 3 lines of code and a function header? How much more simple would you like it? You mentioned you're in university -- you can understand this.
â Adam Smith
17 mins ago
@phpkubrick what? It's 3 lines of code and a function header? How much more simple would you like it? You mentioned you're in university -- you can understand this.
â Adam Smith
17 mins ago
I cant understand the *args, **kwargs
â php kubrick
16 mins ago
I cant understand the *args, **kwargs
â php kubrick
16 mins ago
@phpkubrick I guess that's the next bit of research you should do then, because they're used all over the place in Python and are incredibly useful. stackoverflow.com/questions/36901/â¦
â Adam Smith
15 mins ago
@phpkubrick I guess that's the next bit of research you should do then, because they're used all over the place in Python and are incredibly useful. stackoverflow.com/questions/36901/â¦
â Adam Smith
15 mins ago
 |Â
show 2 more comments
up vote
0
down vote
Function composition isn't supported natively in Python. You can use a decorator as per @Alex's solution. You can define a new function explicitly as per @chepner's solution.
Or you can use a 3rd party library. For example, via toolz.compose
:
from toolz import compose
def adder(x, y):
return x + y
round_adder = compose(round, adder)
round_adder(1.1, 2.2) # 3
add a comment |Â
up vote
0
down vote
Function composition isn't supported natively in Python. You can use a decorator as per @Alex's solution. You can define a new function explicitly as per @chepner's solution.
Or you can use a 3rd party library. For example, via toolz.compose
:
from toolz import compose
def adder(x, y):
return x + y
round_adder = compose(round, adder)
round_adder(1.1, 2.2) # 3
add a comment |Â
up vote
0
down vote
up vote
0
down vote
Function composition isn't supported natively in Python. You can use a decorator as per @Alex's solution. You can define a new function explicitly as per @chepner's solution.
Or you can use a 3rd party library. For example, via toolz.compose
:
from toolz import compose
def adder(x, y):
return x + y
round_adder = compose(round, adder)
round_adder(1.1, 2.2) # 3
Function composition isn't supported natively in Python. You can use a decorator as per @Alex's solution. You can define a new function explicitly as per @chepner's solution.
Or you can use a 3rd party library. For example, via toolz.compose
:
from toolz import compose
def adder(x, y):
return x + y
round_adder = compose(round, adder)
round_adder(1.1, 2.2) # 3
answered 14 mins ago
jpp
78.7k184592
78.7k184592
add a comment |Â
add a comment |Â
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53194500%2fhow-to-make-a-function-composer%23new-answer', 'question_page');
);
Post as a guest
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
2
You are looking for function composition. Mathematically,
h = f â g
is defined ash(x) = f(g(x))
. While it would be nice if Python a composition operator were available in Python, practical concerns require you to define the composed function yourself.â chepner
18 mins ago
2
playing with composition is one of the reasons I quickly fell in love with (then hated, then fell in love with, then hated, then...) Haskell.
â Adam Smith
13 mins ago
Haskell is easy because everything fits into a theoretically sound mathematical framework. Haskell is hard because we are aren't use to conforming to said framework. :)
â chepner
3 mins ago
You can either leave the question to help other people or delete it, but please don't just remove all the content.
â Alex
2 mins ago