4
목록 단순화 목록, 목록 목록, 목록 목록 목록 등의 목록에 대한 기능을 작성하고 싶습니다. 나는 다음을 작성할 수'not'제약 조건 연산자가 있습니까?
NotFlattenable a
{-# LANGUAGE TypeFamilies #-}
class Flattenable a where
type Flattened a
flatten :: a -> Flattened a
instance NotFlattenable a => Flattenable [a] where
type Flattened [a] = [a]
flatten = id
instance Flattenable a => Flattenable [a] where
type Flattened [a] = Flattened a
flatten = concat . map flatten
는 Flattenable
의 인스턴스없이 그 a
에 제한 몇 가지 제약 조건입니다. NotFlattenable
은 합법적 인 제약 사항입니까? 나는 그것을 어떻게 써야 할까?
짧은 답변을 드려 죄송합니다. 아직 폐쇄 형 가족 및 'OverlappingInstances'라는 속임수에 대한 언급이 필요합니다. – leftaroundabout
'OverlappingInstances'는 괜찮습니다. – dfeuer
닫힌 클래스'Flattenable'에 만족하면 닫힌 타입 패밀리를 사용하여 뭔가를 해킹 할 수 있습니다. – augustss