내가 클래스 인스턴스의 속성 확인하는 기능을 가지고 싶다 :하스켈 클래스 속성 검사
class ListWithAtLeastOneElement a where
list :: [a]
check :: Bool
check = (length list) >= 1
을하지만, GHC에서 컴파일 할 때이 오류가 발생합니다 : "클래스 방법은 '확인'은 전혀 언급하지 ListWithAtLeastOneElement 클래스의 유형 변수의 경우 : check :: Bool 'ListWithAtLeastOneElement'에 대한 클래스 선언에서 "
내가 원하는 것을 수행하는 더 좋은 방법이나이를 얻는 방법이 있습니까? GHC에서 컴파일 하시겠습니까?
사소한 단점 : 길이를 확인하는 대신 목록이 'not null'인지 확인하는 것이 좋습니다. 그러나 TomMD의 답변 에서처럼 새로운 데이터 유형을 만드는 것이 더 좋을 것입니다. –
@ John : 새로운 데이터 형식을 만드는 것은 상황에 따라 더 좋습니다. 자주 표준 목록으로 변환하거나 표준 목록에서 변환해야하는 경우, newtype 래퍼가 더 좋습니다. 그러나 나는 'not null'이 더 좋을 것이라는데 동의한다. 원본 게시물 코드를 적어도 하나 이상 자세하게 유지하려고했습니다. – jmg