Hello Oleg, nicely done! I wrote the `GHC.TypeLits` module, and the original plan was that it should just provide the basics needed by the compiler, and other libraries would define a nicer user-facing interface. So, with this in mind, `AppendSymbol` makes a lot of sense to me. However, the original plan didn't quite happen, and everyone seems to be using `GHC.TypeLits` directly, so maybe picking a shorter name is a good idea. To me, personally, `(<>)` and `(++)` look the nicest. I agree with you that `(++)` might suggest that the arguments are type-level lists, which they aren't. OTOH, `(<>)` looks a lot like `(:<>:)`, which is also defined in `GHC.TypeLits` and is used for horizontal concatenation of error messages. Cheers, -Iavor On Tue, Oct 25, 2016 at 8:28 AM, Oleg Grenrus <oleg.grenrus@iki.fi> wrote:
There is an issue #1216: "concatenation of type level symbols missing" [1].
I made a working patch, but we need to figure out the details. As the patch introduces new non-obvious name to the base library, I’m starting a thread in libraries@ to figure out community's opinion.
I’m proposing to add `type family (n :: Symbol) <> (m :: Symbol)` to `GHC.TypeLits`.
Currently implementation uses (<>). Another options are (++), (+++) or `AppendSymbol`.
- (<>) resembles Semigroup operation, as (+) resembles Num operation - (++) is a list appending operation. IMHO it’s a bad choice - (+++) is used by ghc-typelits-symbols plugin - `AppendSymbol` is sensible too, if libraries want to define own versions of type-level (<>) (e.g. polykinded)
Discussion period: 2 weeks.
Cheers, Oleg Grenrus.
- [1] https://ghc.haskell.org/trac/ghc/ticket/12162 - [2] https://github.com/konn/ghc-typelits-symbols/blob/ cd812f4cfc2e6816a18283a6a0e9bb2d9ea2905e/src/GHC/TypeLits/ Symbols/Internal.hs#L6-L8
_______________________________________________ Libraries mailing list Libraries@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries