나는 하스켈에서 다음을 예로 듭니다.하스켈에서 GADT 표현식 유형을 동적으로 만들 수 없습니다.
{-# LANGUAGE GADTs #-}
import Data.Dynamic
data Expr a where
Lift :: (Show a) => a -> Expr a --Lift some type into Expr
Lam :: (Expr a -> Expr b) -> Expr (a -> b)
Const :: Expr a -> Expr b -> Expr a
다음에서 동적을 만들려고 할 때 수정 방법을 잘 모르겠다는 오류가 발생합니다.
--This is the code
toDyn $ (Lam (Const (Lift 1)))
-- This is the error
-- • No instance for (Typeable b0) arising from a use of ‘toDyn’
-- • In the expression: toDyn (Lam (Const (Lift 1)))
-- In an equation for ‘it’: it = toDyn (Lam (Const (Lift 1)))
거기에 방법이 있습니까? 다른 생성자는 모두 잘 작동합니다 (내 실제 프로그램에는 100 개가 넘습니다!)하지만 Const가 정말 저에게 문제가됩니다!
'(Lam ...) '에 특정 유형을 제공해야합니다. 그렇지 않으면 너무 일반적이어서 다형성 유형 만 지정할 수 있습니다. 기본적으로'Const' 응용 프로그램에서'b'가 무엇인지 선택해야합니다. – chi