
IIRC .Net interfaces cannot be added outside assembly (I may be wrong). On the other hand Haskell does not have inheritance.
Generally Haskell: newtype/data specify data (and type) while classes provides basic abstract operations on it. C#/Java/...: Classes specify data AND how to operate on it (including non-basic operators) and interfaces abstract operations.
- It is not that it can occur once:
class Abc x where abc :: x -> [x]
is roughly:
interface Abc<in T> { public IList<T> abc();
}
- It seems that it is not possible to have default implementations in interfaces.
To understand the extend haskell supports object oriented behavior such as inheritance it is worth reading: http://homepages.cwi.nl/~ralf/OOHaskell/paper.pdf Perhaps, I should start a new discussion on this.