AllowAmbiguousTypes는 어디에서 사용할 수 있는 기능입니까? 구체적인 예편

7795 단어 ghc하스켈

이 예: ScopedTypeVariables, TypeApplications와의 조합



뭔가 전혀 잘 모르겠지만
그러고 보니 하스켈 초보자였을 무렵에 자주 GHC 서제스트된 느낌AllowAmbiguousTypes pragma이지만,
처음으로 "너를 사용하게 해줘!"라는 장면을 만났습니다.

여기
{-# LANGUAGE AllowAmbiguousTypes #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeApplications #-}

check :: forall a. (Group a, Eq a) => Bool
check = (empty :: a) <> empty == empty

main :: IO ()
main = do
  smallCheck 2 $ check @Sum
  smallCheck 2 $ check @RSum
newtype Sum = Sum
  { unSum :: Int
  } deriving (Show, Eq, Num, Enum)

newtype RSum = RSum
  { unRSum :: Rational
  } deriving (Show, Eq, Num, Enum)

class Monoid a => Group a where
  inverse :: a -> a

instance Group Sum where
  inverse = negate

instance Group RSum where
  inverse = negate

instance Group () where
  inverse () = ()

이게 뭐야?



최근에는 기술 서전 5에서 발표 한 "야자와 니코 선배와 함께 대수!"라는 책을 쓰고 있습니다.

기술 서전 5에 당첨되었습니다 🎉✨✨에 코쨩이 하스켈에서 수학을 가르쳐 주는 책을 냅니다! #기술서전 #기술서전5 htps // t. 코/에 v4BPQX1PT 피 c. 라고 r. 코 m / SGQt 후 pg d — 아이야🤘🙄🤘 기술 서전 5@ 또는 74 (@public_ai000ya) 2018년 8월 3일


그룹 장을 쓰는 곳에서

"임의의 군은 e * e = e 누구?"

라는 의문에 달려 있었기 때문에,

그 확인을 한 것입니다.



check :: forall a. (Group a, Eq a) => Bool
check = (empty :: a) <> empty == empty

smallCheck 2 $ check @Sum
smallCheck 2 $ check @RSum


여기에서 a 는 인수에 나타나지 않으므로 AllowAmbiguousTypes 가 필요합니다.
ScopedTypeVariables 으로 a 를 문장에서 사용.

그리고 사용측에서 그 군 인스턴스의 형태를…

인수에 관계없이 지정합니다.



인수에 의존하지 않는 곳이
AllowAmbiguousTypes 가 필요한 요점이었습니다





홍보



기술서전 5에 나온 후에는

Booth에서 전자책에서 판매할 예정입니다





<script async=""src="https://platform.twitter.com/widgets.js"/>

잘 부탁드립니다!


좋은 웹페이지 즐겨찾기