I'm trying to fully understand all of Haskell's concepts.
In what ways are algebraic data types similar to generic types, e.g., in C# and Java? And how are they different? What's so algebraic about them anyway?
I'm familiar with universal algebra and its rings and fields, but I only have a vague idea of how Haskell's types work.
...

I would like to know how to infer coercions (a.k.a. implicit conversions) during type inference. I am using the type inference scheme described in Top Quality Type Error Messages by Bastiaan Heeren, but I'd assume that the general idea is probably the same in all Hindley-Milner-esque approaches.
It seems like coercion could be treated a...

The Wikipedia artcile on Effect system is currently just a short stub and I've been wondering for a while as to what is an effect system.
Are there any languages that have an effect system in addition to a type system?
What would a possible (hypothetical) notation in a mainstream language, that you're familiar, with look like with e...

The comments on Steve Yegge's post about server-side Javascript started discussing the merits of type systems in languages and this comment describes:
... examples from H-M style systems where you can get things like:
expected signature Int*Int->Int but got Int*Int->Int
Can you give an example of a function definition (or two?) ...

Is there any programming language (or type system) in which you could express the following Python-functions in a statically typed and type-safe way (without having to use casts, runtime-checks etc)?
#1:
# My function - What would its type be?
def Apply(x):
return x(x)
# Example usage
print Apply(lambda _: 42)
#2:
white = None...

In Beyond Java(Section 2.2.9), Brute Tate claims that "typing model" is one of the problems of C++. What does that mean?
...

I'm trying to get a better grip on how types come into play in lambda calculus. Admittedly, a lot of the type theory stuff is over my head. Lisp is a dynamically typed language, would that roughly correspond to untyped lambda calculus? Or is there some kind of "dynamically typed lambda calculus" that I'm unaware of?
...

Of course, by 'advanced' I mean here just something beyond what every programmer does know. I'm currently more-or-less comfortable with the basics and want to understand the most important, most elegant and most practically applicable achievements of modern type theory.
I just do not have much time, desire and mental powers to study all...

Hi.
Could you please explain me what is the basic connection between the fundamentals of logical programming and the phenomenon of syntactic similarity between type systems and conventional logic?
...

I am just starting to read about category theory, and would very much appreciate it if someone could explain the connection between CS contravariance/covariance and category theory. What would some example categories be (i.e. what are their objects/morphisms?)? Thanks in advance?
...

Anyone who has been following Tony Morris' blog and scala exercises, will know that these two type signatures are equivalent:
trait MyOption1[A] {
//this is a catamorphism
def fold[B](some : A => B, none : => B) : B
}
And:
trait MyOption2[A] {
def map[B](f : A => B) : MyOption2[B]
def getOrElse[B >: A](none : => B) : B
}
F...

http://muaddibspace.blogspot.com/2008/01/type-inference-for-simply-typed-lambda.html is a concise definition of the simply typed lambda calculus in Prolog.
It looks okay, but then he purports to assign a type to the Y combinator... whereas in a very real sense the entire purpose of adding types to lambda calculus is to refuse to assign ...