그래서 하스켈 라이브러리 날이하스켈에서는 숟가락이 안전하지 않습니까?
safeHead :: [a] -> Maybe a
safeHead = spoon . head
을 수행 할 수 있습니다 spoon라고있을뿐만 아니라 나에게 어떤 경우에는 정말 유용 할 것 같습니다이
>>> spoon True :: Maybe Bool
Just True
>>> spoon (error "fork") :: Maybe Bool
Nothing
>>> spoon undefined :: Maybe Bool
Nothing
>>> spoon (let x = x in x) :: Maybe Bool
<... let's just keep waiting...>
을 수행 할 수 있습니다, 그러나 그것은 또한 denotational 의미를 위반 (내 이해에) 그것은 ⊥
의 시맨틱 이미지에서 다른 것들을 구분할 수있게 해주기 때문이다. 이는 연속성에 의해 정의 된 의미를 가지고 있기 때문에 throw
/catch
보다 강력합니다.
>>> try $ return (error "thimble") :: IO (Either SomeException Bool)
Right *** Exception: thimble
그럼 내 질문은 : 누군가가 숟가락을 사용하여 유형 안전을 파괴 할 수 있습니까? 위험 할 가치가있는 편의? 또는 더 현실적으로, 그것을 사용하는 것이 프로그램의 의미에 대한 누군가의 자신감을 침식 할 수있는 합리적인 방법이 있습니까?
당신은 무슨 위험을 말하고 있습니까? 순정 주의자가 공포에 반동 할 수 있을까? –
좋은 질문입니다,이게 정말 유용 할 것 같습니다. –
@RobertHarvey 아무리 위험한 일이 아니지만, 순도를 위반하면 모듈 캡슐화를 둘러싼 행동이나 트릭에 대한 잘못된 기대로 이어질 수 있습니다.나는 실제 코드에서'spoon'을 사용하는 것보다 행복 할 것이지만, 나는 그것이 Haskell의 의미에 위배된다는 것을 오늘 알았다. –