I'm all for "encourage" but not keen on "require". Simon
| -----Original Message----- | From: ghc-devs <ghc-devs-boun...@haskell.org> On Behalf Of Hécate | Sent: 18 May 2021 19:18 | To: ghc-devs@haskell.org | Subject: Re: Coding style: Using StandaloneKindSignatures in GHC | | After reading this proposal, I agree that StandaloneKindSignatures ought | to be encouraged in the codebases, and I vote that we mention them in the | coding style¹. | | Cheers, | Hécate | | ——— | ¹ | https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgitlab. | haskell.org%2Fghc%2Fghc%2F-%2Fwikis%2Fcommentary%2Fcoding- | style&data=04%7C01%7Csimonpj%40microsoft.com%7C526d76f0fe6f4bfad5b208 | d91a297bd3%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C63756958777303339 | 3%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1 | haWwiLCJXVCI6Mn0%3D%7C3000&sdata=xUV24DTEWYImjevJtWxK1hAB6QI0gX9dqvXm | 81jLOPo%3D&reserved=0 | | Cheers, | Hécate. | | Le 18/05/2021 à 19:58, Baldur Blöndal a écrit : | > Discussion to permit use of StandaloneKindSignatures in the GHC coding | > style guide. I believe it increases the clarity of the code, | > especially as we move to fancier kinds. | > | > It is the only way we have for giving full signatures to type | > synonyms, type classes, type families and others. An example: | > | > type Cat :: Type -> Type | > type Cat ob = ob -> ob -> Type | > | > type Category :: forall ob. Cat ob -> Constraint | > class Category cat where | > id :: cat a a .. | > | > type Proxy :: forall k. k -> Type | > data Proxy a = Proxy | > | > type Some :: forall k. (k -> Type) -> Type | > data Some f where | > Some :: f ex -> Some f | > | > -- | The regular function type | > type (->) :: forall {rep1 :: RuntimeRep} {rep2 :: RuntimeRep}. | > TYPE1 rep1 -> TYPE rep2 -> Type | > type (->) = FUN 'Many | > | > This is in line with function definitions that are always given a | > top-level, standalone type signature (1) and not like we currently | > define type families/synonyms (2) by annotating each argument or not | > at all. Using -XStandaloneKindSignatures (3) matches (1) | > | > -- (1) | > curry :: ((a, b) -> c) -> (a -> b -> c) | > curry f x y = f (x, y) | > | > -- (2) | > type Curry (f :: (a, b) -> c) (x :: a) (y :: b) = f '(x, y) :: c | > | > -- (3) | > type Curry :: ((a, b) -> c) -> (a -> b -> c) | > type Curry f x y = f '(x, y) | > | > It covers an edgecase that `KindSignatures` don't. The only way for | > deriving to reference datatype arguments is if they are quantified by | > the declaration head -- `newtype Bin a ..`. StandaloneKindSignatures | > allows us to still provide a full signature. We could write `newtype | > Bin a :: Type -> Type` without it but not `newtype Bin :: Type -> Type | > -> Type` | > | > type Bin :: Type -> Type -> Type | > newtype Bin a b = Bin (a -> a -> b) | > deriving (Functor, Applicative) | > via (->) a `Compose` (->) a | > | > Let me know what you think | > _______________________________________________ | > ghc-devs mailing list | > ghc-devs@haskell.org | > https://nam06.safelinks.protection.outlook.com/?url=http%3A%2F%2Fmail. | > haskell.org%2Fcgi-bin%2Fmailman%2Flistinfo%2Fghc-devs&data=04%7C01 | > %7Csimonpj%40microsoft.com%7C526d76f0fe6f4bfad5b208d91a297bd3%7C72f988 | > bf86f141af91ab2d7cd011db47%7C1%7C0%7C637569587773033393%7CUnknown%7CTW | > FpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6 | > Mn0%3D%7C3000&sdata=Dc5Xbl2YJ%2BWmstt2z289UAzX9s%2BWJ5RuH84V2AbxJY | > c%3D&reserved=0 | | -- | Hécate ✨ | 🐦: @TechnoEmpress | IRC: Uniaika | WWW: | https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fglitchb | ra.in%2F&data=04%7C01%7Csimonpj%40microsoft.com%7C526d76f0fe6f4bfad5b | 208d91a297bd3%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C63756958777304 | 3386%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6 | Ik1haWwiLCJXVCI6Mn0%3D%7C3000&sdata=KqNL0D9zC%2FiOORPEUqChk%2FTUxkekq | vxyZuyokFjcxMI%3D&reserved=0 | RUN: BSD | | _______________________________________________ | ghc-devs mailing list | ghc-devs@haskell.org | https://nam06.safelinks.protection.outlook.com/?url=http%3A%2F%2Fmail.has | kell.org%2Fcgi-bin%2Fmailman%2Flistinfo%2Fghc- | devs&data=04%7C01%7Csimonpj%40microsoft.com%7C526d76f0fe6f4bfad5b208d | 91a297bd3%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637569587773043386 | %7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1h | aWwiLCJXVCI6Mn0%3D%7C3000&sdata=yuGMW58YP7Grt4TrjtL5dahu0vSOP%2BYmV9I | zxLvrRxI%3D&reserved=0 _______________________________________________ ghc-devs mailing list ghc-devs@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs