data X a = X a
は、
template<class T>
struct X {
X(const T& t) {
}
};
のような感じ。
date X = forall a. X a
は、
struct X {
template<class T>
X(const T& t) {
}
};
のような感じ。
data Num a => X a = X a
は、
template<class Num>
struct X {
X(const Num& n) {
}
};
のような感じ。
data X = X (forall a. Num a => a)
は、
struct X {
X(const Num& n) {
}
};
のような感じ。
C++だと制約がうまく表せない場所がありますが(例えば3番目のNumの制約とか)、こんな感じではないかと。