たとえば、ParsecTの定義には複数の型変数があります。 newtype ParsecT s u m a
= ParsecT {unParser :: forall b .
State s u
-> (a -> State s u -> ParseError -> m b)
-> (ParseError -> m b)
私は、問題を解決するために、スーパークラス内のサブクラスのフィールドにアクセスすることについて先に投稿しました。しかし、彼らはそれが事実上不可能であることを明らかにした。だから私は私が達成したいものの少し例を作った: abstract class LotteryTicket(val numbers: String) {
val price: Int
}
//The numbers ar
{-# LANGUAGE GADTs #-}
data Expr a where
Val :: Num a => a -> Expr a
Eq :: Eq a => Expr a -> Expr a -> Expr Bool
eval :: Expr a -> a
eval (Val x) = x
eval (Eq x y) = (eval x) == (eval