Coding style: Using StandaloneKindSignatures in GHC

Simon Peyton Jones simonpj at microsoft.com
Tue May 18 20:41:10 UTC 2021


I'm all for "encourage" but not keen on "require".

Simon

| -----Original Message-----
| From: ghc-devs <ghc-devs-bounces at haskell.org> On Behalf Of Hécate
| Sent: 18 May 2021 19:18
| To: ghc-devs at 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 at 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 at 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


More information about the ghc-devs mailing list