나는 a GADT walkthrough을 통해 읽고 있었고 연습 중 하나에서 멈추었습니다. 주어진 자료 구조는 다음과 같습니다GADT를 사용하는 "안전한 목록"을위한 테일 기능
{-# LANGUAGE GADTs, EmptyDataDecls, KindSignatures #-}
data NotSafe
data Safe
data MarkedList :: * -> * -> * where
Nil :: MarkedList t NotSafe
Cons :: a -> MarkedList a b -> MarkedList a c
운동은 safeTail
기능을 구현하는 것입니다.
safeTail (Cons 'c' (Cons 'a' (Cons 't' Nil))) == Cons 'a' (Cons 't' Nil)
safeTail (Cons 'x' Nil) == Nil
safeTail Nil -- type error (not runtime!)
가 (실제로 ==
을 정의하지 않았다, 그러나 희망이 무슨 뜻인지 분명)
이이
을 수행 할 수 있습니다 : 나는 서곡에tail
기능과 비슷한 역할을하고 싶습니다? 나는 타입이 심지어 무엇이 될지 전혀 모른다. 아마
safeTail :: MarkedList a Safe -> MarkedList a NotSafe
?
참고. 간접적으로 저를 "버그"로 안내해 주셔서 감사합니다. – duplode
당신이 받아 들인 것이 흥미 롭다고하더라도 당신이 틀린 대답을 받아 들였다고 생각합니다. 이 연습에서는 데이터 유형을 변경하도록 요청하지 않습니다. –