하나의 단위 값을 가진 유형에 대한 클래스가 있습니다 (여기에 올바른 용어가 확실하지 않습니다.) 즉 사전 정의 된 값이있는 유형이입니까? 등 모든 Monoids, MonadPlus,"unit"클래스가 있습니까? 유용할까요?
에 대한
class Unit a where
unit :: a
instance Unit() where
unit =()
instance Unit (Maybe a) where
unit = Nothing
... 나는 클래스의 또 다른 이름은 Default
수 있습니다 가정합니다. 이것은 나를 위해 최근에 두 번 유용했을 것입니다.
아마 납득 예 :
extract :: (Unit r)=> Reader r a -> a
extract r = runReader r unit
이 존재 하는가? 다른 사람들이 유용하다고 생각합니까?
이렇게 모호한 답변을 주셔서 감사합니다. 나는 실제로 "기본값"(아마 언급하지 말았어야했다)이라는 개념에 관심이 없지만 함수 (또는 추상화)의 왼편에서 발생하는 이러한() ...이 수업을 어떻게 사용하고 싶은지 더 생각해야합니다. 감사! – jberryman
@ jberryman : 아마도 당신이 한 것은 정확히 하나의 nullary 생성자가있는 유형의 유형 클래스라고 생각합니까? '()','Nothing','[]'등을 포함합니다.,하지만 부울이나 숫자 또는 그런 건 아닙니다. 그것은 적어도 분명히 정의되어 있으며 싱글 톤만큼 혼자만의 것은 아닙니다. –
예, 맞습니다. 내'Reader '예제의 행을 보면 싱크 나 함수 또는 다른 유형의 Cofunctor-ish의 경우 특수한 경우'()'에 대한 흥미로운 함수를 정의 할 수 있다는 것을 알게되었습니다. 'liftCofunc :: (Cofunctor f) => f() -> f a'입니다. 위의 함수가 더 일반적으로 정의 될 수 있는지를 보는 것이 흥미로울 것이라고 생각했습니다. 다시 한번 감사드립니다. * 편집 : * 'Cofunctor'도 표준 클래스가 아니라는 것은 우연이 아닌 것 같아요.) – jberryman