caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
* [Caml-list] [ANN] ppx_deriving 0.1
@ 2014-07-23  9:55 Peter Zotov
  2014-07-23 14:36 ` Yotam Barnoy
  0 siblings, 1 reply; 5+ messages in thread
From: Peter Zotov @ 2014-07-23  9:55 UTC (permalink / raw)
  To: caml-list

Hello,

I'm glad to announce an initial release of ppx_deriving,
a modular syntax extension for type-driven code generation.
It will be shortly available in OPAM.

I will introduce ppx_deriving with an example:

# #require "ppx_deriving";;
# type file = {
   kind : [ `File | `Dir ];
   name : string;
   perm : int [@printer fun fmt -> Format.fprintf fmt "0o%03o"];
} [@@deriving Show, Eq];;
type file = { kind : [ `Dir | `File ]; name : bytes; perm : int; }
val pp_file : Format.formatter -> file -> unit = <fun>
val show_file : file -> bytes = <fun>
val equal_file : file -> file -> bool = <fun>
# print_endline (show_file { kind = `Dir; name = "bin"; perm = 0o755 
});;
{ kind = `Dir; name = "bin"; perm = 0o755 }
- : unit = ()

A more thorough description is available in README[1].

While I intend this release to primarily serve as a preview for
the community and a means to gather feedback, it is fully usable
and documented. Some of the planned features (marked "TBD" in README)
are not yet implemented.

I hope that ppx_deriving can serve as a future replacement to both
ocsigen's deriving and JaneStreet's type_conv. If you are responsible
for these libraries, please get in touch. The OCaml ecosystem would
benefit from a single type-driven code generation mechanism.

I welcome any comments.

   [1]: https://github.com/whitequark/ppx_deriving/

-- 
Peter Zotov
sip:whitequark@sipnet.ru

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [Caml-list] [ANN] ppx_deriving 0.1
  2014-07-23  9:55 [Caml-list] [ANN] ppx_deriving 0.1 Peter Zotov
@ 2014-07-23 14:36 ` Yotam Barnoy
  2014-07-23 20:19   ` Peter Zotov
  0 siblings, 1 reply; 5+ messages in thread
From: Yotam Barnoy @ 2014-07-23 14:36 UTC (permalink / raw)
  To: Peter Zotov; +Cc: Ocaml Mailing List

[-- Attachment #1: Type: text/plain, Size: 2511 bytes --]

Very nice.

I've never used any of the deriving extensions before, but I have an
aesthetic suggestions. Would it perhaps make sense to generate a module per
derived type? For example a type t would generate a module T_ (the
underscore or any other suffix would reduce mixups with pre-existing
modules). You could then use code such as

'if T_.(a = b && b = c) ...'

or  'T_.show x ...'

which allows you to keep the infix notation for = which is important IMO.

You could even generate T_ as having internal Eq, Ord, and Show modules (as
requested by the user), which would be included in the T_ module. This
would allow you to easily pass them as first class modules to functions
accepting Eq, Ord or Show signatures.

Yotam



On Wed, Jul 23, 2014 at 5:55 AM, Peter Zotov <whitequark@whitequark.org>
wrote:

> Hello,
>
> I'm glad to announce an initial release of ppx_deriving,
> a modular syntax extension for type-driven code generation.
> It will be shortly available in OPAM.
>
> I will introduce ppx_deriving with an example:
>
> # #require "ppx_deriving";;
> # type file = {
>   kind : [ `File | `Dir ];
>   name : string;
>   perm : int [@printer fun fmt -> Format.fprintf fmt "0o%03o"];
> } [@@deriving Show, Eq];;
> type file = { kind : [ `Dir | `File ]; name : bytes; perm : int; }
> val pp_file : Format.formatter -> file -> unit = <fun>
> val show_file : file -> bytes = <fun>
> val equal_file : file -> file -> bool = <fun>
> # print_endline (show_file { kind = `Dir; name = "bin"; perm = 0o755 });;
> { kind = `Dir; name = "bin"; perm = 0o755 }
> - : unit = ()
>
> A more thorough description is available in README[1].
>
> While I intend this release to primarily serve as a preview for
> the community and a means to gather feedback, it is fully usable
> and documented. Some of the planned features (marked "TBD" in README)
> are not yet implemented.
>
> I hope that ppx_deriving can serve as a future replacement to both
> ocsigen's deriving and JaneStreet's type_conv. If you are responsible
> for these libraries, please get in touch. The OCaml ecosystem would
> benefit from a single type-driven code generation mechanism.
>
> I welcome any comments.
>
>   [1]: https://github.com/whitequark/ppx_deriving/
>
> --
> Peter Zotov
> sip:whitequark@sipnet.ru
>
> --
> Caml-list mailing list.  Subscription management and archives:
> https://sympa.inria.fr/sympa/arc/caml-list
> Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
> Bug reports: http://caml.inria.fr/bin/caml-bugs
>

[-- Attachment #2: Type: text/html, Size: 3714 bytes --]

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [Caml-list] [ANN] ppx_deriving 0.1
  2014-07-23 14:36 ` Yotam Barnoy
@ 2014-07-23 20:19   ` Peter Zotov
  2014-07-23 20:37     ` Yotam Barnoy
  0 siblings, 1 reply; 5+ messages in thread
From: Peter Zotov @ 2014-07-23 20:19 UTC (permalink / raw)
  To: Yotam Barnoy; +Cc: caml-list

On 2014-07-23 18:36, Yotam Barnoy wrote:
> Very nice.
> 
> I've never used any of the deriving extensions before, but I have an
> aesthetic suggestions.

I humbly suggest trying to use it before proposing aesthetic changes.

> Would it perhaps make sense to generate a
> module per derived type? For example a type t would generate a module
> T_ (the underscore or any other suffix would reduce mixups with
> pre-existing modules). You could then use code such as
> 
> 'if T_.(a = b && b = c) ...'
> 
> or  'T_.show x ...'
> 
> which allows you to keep the infix notation for = which is important
> IMO.
> 
> You could even generate T_ as having internal Eq, Ord, and Show
> modules (as requested by the user), which would be included in the T_
> module. This would allow you to easily pass them as first class
> modules to functions accepting Eq, Ord or Show signatures.

I believe this is best left to the upcoming implicits, which will
hopefully be merged soon.

I have based the current design on existing patterns across OCaml
ecosystem; I don't want to change the way people structure their
modules, I want to reduce the amount of boilerplate to write.

-- 
Peter Zotov
sip:whitequark@sipnet.ru

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [Caml-list] [ANN] ppx_deriving 0.1
  2014-07-23 20:19   ` Peter Zotov
@ 2014-07-23 20:37     ` Yotam Barnoy
  2014-07-28 12:26       ` Peter Zotov
  0 siblings, 1 reply; 5+ messages in thread
From: Yotam Barnoy @ 2014-07-23 20:37 UTC (permalink / raw)
  To: Peter Zotov; +Cc: Ocaml Mailing List

[-- Attachment #1: Type: text/plain, Size: 1639 bytes --]

OK, I was just making some suggestions based on experience I have with
haskell's deriving, which I use all the time, and trying to bring as much
of that ease of use as possible to ocaml.

Any idea where I can find some info on ocaml's upcoming implicits? A google
search was not particularly helpful.



On Wed, Jul 23, 2014 at 4:19 PM, Peter Zotov <whitequark@whitequark.org>
wrote:

> On 2014-07-23 18:36, Yotam Barnoy wrote:
>
>> Very nice.
>>
>> I've never used any of the deriving extensions before, but I have an
>> aesthetic suggestions.
>>
>
> I humbly suggest trying to use it before proposing aesthetic changes.
>
>
>  Would it perhaps make sense to generate a
>> module per derived type? For example a type t would generate a module
>> T_ (the underscore or any other suffix would reduce mixups with
>> pre-existing modules). You could then use code such as
>>
>> 'if T_.(a = b && b = c) ...'
>>
>> or  'T_.show x ...'
>>
>> which allows you to keep the infix notation for = which is important
>> IMO.
>>
>> You could even generate T_ as having internal Eq, Ord, and Show
>> modules (as requested by the user), which would be included in the T_
>> module. This would allow you to easily pass them as first class
>> modules to functions accepting Eq, Ord or Show signatures.
>>
>
> I believe this is best left to the upcoming implicits, which will
> hopefully be merged soon.
>
> I have based the current design on existing patterns across OCaml
> ecosystem; I don't want to change the way people structure their
> modules, I want to reduce the amount of boilerplate to write.
>
>
> --
> Peter Zotov
> sip:whitequark@sipnet.ru
>

[-- Attachment #2: Type: text/html, Size: 2501 bytes --]

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [Caml-list] [ANN] ppx_deriving 0.1
  2014-07-23 20:37     ` Yotam Barnoy
@ 2014-07-28 12:26       ` Peter Zotov
  0 siblings, 0 replies; 5+ messages in thread
From: Peter Zotov @ 2014-07-28 12:26 UTC (permalink / raw)
  To: Yotam Barnoy; +Cc: Ocaml Mailing List, caml-list-request

On 2014-07-24 00:37, Yotam Barnoy wrote:
> OK, I was just making some suggestions based on experience I have with
> haskell's deriving, which I use all the time, and trying to bring as
> much of that ease of use as possible to ocaml.

Thank you for the suggestion. I see some cases where modules would be 
useful,
(including, eventually, implicits), but as most deriving plugins 
generate
a single function now, I think it would be pointless to generate such 
modules.

>  Any idea where I can find some info on ocaml's upcoming implicits? A
> google search was not particularly helpful.

There are two articles by Alain Frisch:
http://www.lexifi.com/blog/implicit-values
http://www.lexifi.com/blog/implicit-arguments

They get the general idea across, but do not represent the ongoing work.
The ongoing work is being done in this git repository:
https://github.com/def-lkb/ocaml/commits/implicit-module

As far as I know, it is not yet documented in any way and it is not 
clear
whether it will be merged in OCaml at all.
However, I have high hopes for this feature.

> 
> On Wed, Jul 23, 2014 at 4:19 PM, Peter Zotov
> <whitequark@whitequark.org> wrote:
> 
>> On 2014-07-23 18:36, Yotam Barnoy wrote:
>> 
>>> Very nice.
>>> 
>>> I've never used any of the deriving extensions before, but I have
>>> an
>>> aesthetic suggestions.
>> 
>> I humbly suggest trying to use it before proposing aesthetic
>> changes.
>> 
>>> Would it perhaps make sense to generate a
>>> module per derived type? For example a type t would generate a
>>> module
>>> T_ (the underscore or any other suffix would reduce mixups with
>>> pre-existing modules). You could then use code such as
>>> 
>>> 'if T_.(a = b && b = c) ...'
>>> 
>>> or 'T_.show x ...'
>>> 
>>> which allows you to keep the infix notation for = which is
>>> important
>>> IMO.
>>> 
>>> You could even generate T_ as having internal Eq, Ord, and Show
>>> modules (as requested by the user), which would be included in
>>> the T_
>>> module. This would allow you to easily pass them as first class
>>> modules to functions accepting Eq, Ord or Show signatures.
>> 
>> I believe this is best left to the upcoming implicits, which will
>> hopefully be merged soon.
>> 
>> I have based the current design on existing patterns across OCaml
>> ecosystem; I don't want to change the way people structure their
>> modules, I want to reduce the amount of boilerplate to write.
>> 
>> --
>> Peter Zotov
>> sip:whitequark@sipnet.ru

-- 
Peter Zotov

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2014-07-28 12:26 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-07-23  9:55 [Caml-list] [ANN] ppx_deriving 0.1 Peter Zotov
2014-07-23 14:36 ` Yotam Barnoy
2014-07-23 20:19   ` Peter Zotov
2014-07-23 20:37     ` Yotam Barnoy
2014-07-28 12:26       ` Peter Zotov

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).