ImpredicativeTypes로 할 수있는 것을보고 정확히 무엇을 할 수 있는지보고 싶었습니다. TypeClasses와의 상호 작용에있어서 어떤 이상한 행동이 있다고 생각하는 곳으로 도망 쳤습니다. :t mempty
mempty :: forall a. Monoid a => a
:t Right
Right :: forall a b. b -> Eith
내 친구는 지난 주에 끔찍한 냄새를 맡고있는 Scala 언어 질문에 대해 다음과 같은 좋은 답변을 제시하지 못했습니다. 일반적인 typeclass에 속하는 모음을 선언하는 쉬운 방법이 있는지 여부 . 물론 스칼라에서는 "typeclass"에 대한 일류 개념이 없기 때문에 이것을 특성과 컨텍스트 경계 (implicits)라는 관점에서 생각해야합니다. type
과 같은 형식은 Lens'이 -XImpredicativeTypes 확장자 (실제로 GHC에서 지원되지 않음)가없는 형식 생성자로 래핑 할 수없는 순위 2 형식이기 때문에 작동하지 않습니다. 도덕적 가능성이 통과 계속 foo' :: ∀ y . A -> (Lens' B C -> y) -> Maybe y
에 Maybe을 연기하는 것 foo :: A -> Ma
하스켈에서 Forth와 유사한 DSL을 작성하기 위해 최근의 하스켈 블로그 활동 에 영감을 받았습니다. 이 꽤 잘 작동, {-# LANGUAGE TypeOperators, RankNTypes, ImpredicativeTypes #-}
-- a :~> b represents a "stack transformation"
-- from stack typ
내가 작업중인 것을 위해 일반적인 스택을 구현해야한다. 이 스택은 다른 유형의 요소를 보유 할 수 있어야합니다. 예를 들어, (1, 'c', True, "Strings"). 지원되는 기능은 top, pop 및 push입니다. 튜플이 가장 기본적인 아이디어입니다. push x s = (x,s)
pop s = snd s
top s = (fst s, s)