caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
From: Yaron Minsky <yminsky@janestreet.com>
To: Kenneth Adam Miller <kennethadammiller@gmail.com>
Cc: Ben Millwood <bmillwood@janestreet.com>,
	Francois Berenger <francois.berenger@inria.fr>,
	caml users <caml-list@inria.fr>
Subject: Re: [Caml-list] Core Overlay
Date: Fri, 26 Jun 2015 12:57:21 -0400	[thread overview]
Message-ID: <CACLX4jSMJNR0orDE9zn4br+i5QQAO=+3608UW7XpqAsXn5jOMg@mail.gmail.com> (raw)
In-Reply-To: <CAK7rcp95yZV3XinrQbxh7+i3dBT-Y1DGG3VkuYGmTOyOUhwbOQ@mail.gmail.com>

If you compile with -short-paths, OCaml will start reporting all your
list types as 'a list, rather than Core.Std.List.t.

y

On Fri, Jun 26, 2015 at 9:09 AM, Kenneth Adam Miller
<kennethadammiller@gmail.com> wrote:
> I was reading compiler output and seeing that at times it would say things
> like xyz Core.Std.list = xyz list; I thought that was likely the case, and
> instances seemed interchangeable to the functions they get called on. But I
> wondered if there were some catch, as in the Core.Std.List type actually
> extends the pervasives list, or some subtlety that I missed. Thanks for that
> tidbit of information :)
>
> I got the rest of it refactored, and the core related stuff compiles. Now
> I'm just dealing with module interdependency issues.
>
> On Fri, Jun 26, 2015 at 2:34 AM, Ben Millwood <bmillwood@janestreet.com>
> wrote:
>>
>> Core does not have its own list type, only its own list functions. ['a
>> Core.Std.List.t] is equal to ['a list], and the compiler only tells you one
>> or the other based on its heuristics for what would be most useful for you
>> to hear (which can't be right every time).
>>
>> Opening Core.Std at the beginning of your program is still the recommended
>> way to use Core, but you can also do something less invasive like just using
>> Core.Std.List.map directly. You may also find it useful that Core's List.map
>> takes a named argument ~f, whereas the standard List.map can't do that
>> (although ListLabels.map can).
>>
>> On 25 June 2015 at 08:55, Francois Berenger <francois.berenger@inria.fr>
>> wrote:
>>>
>>> Just an idea, maybe you can put 'open Core.Std' (I'm not sure that's
>>> anymore the correct way to use Core but ...) on top of each
>>> ml file of the project, then try to recompile it like that.
>>>
>>> I guess you will then have many compilation errors that
>>> will force you to fix code to use Core's version of everything.
>>> After that, very few non tail rec. functions should remain
>>> in the code base.
>>>
>>>
>>> On 06/24/2015 06:02 PM, Kenneth Adam Miller wrote:
>>>>
>>>> I'm trying to upgrade a library that has a lot of existing code that
>>>> makes calls to List.map; the core overlay is really nice, and I'd like
>>>> to make use of a tail recursive implementation because that much is
>>>> pretty much imperative.
>>>>
>>>> I've refactored the code of the library to make sure that the compiler
>>>> identifies the list and the operation types being from Core.List,
>>>> recompiled, opam pinned the project. But I keep getting blowups. I've
>>>> executed the code in gdb, and gotten a backtrace with the stack overflow
>>>> and I can see that it's still going to List.map.
>>>>
>>>> So I'm thinking it has to be one of a few errors:
>>>>
>>>> I've fixed it, but it's linking against a different, older version of
>>>> the library.
>>>> * Problem with this is, the makefile generates ocamlfind calls, and
>>>> those resolve the package correctly. I've check the file dates, removed
>>>> the packages and readded them a multi-tude of times. Unless there's some
>>>> invisible /usr/local compiler selection over the opam stuff despite it
>>>> being specifically pointed there, I don't see how this could be. But I
>>>> could be wrong.
>>>>
>>>> I've fixed the library some, but it some how resolves to a Pervasives
>>>> type that's not tail recursive somewhere in the library that I missed.
>>>> * I still don't see how this could be. I'm looking in the gdb backtrace,
>>>> and I can see where it flows from my code into the library-the library.
>>>> I've tracked the naming convention down to the exact function definition
>>>> and checked via Emacs Merlin that it's the type it should be.
>>>>
>>>>
>>>> I've fixed the library correctly, but somehow a mismatch between
>>>> pervasives and Core definitions causes some fallback to the pervasives
>>>> via some kind of invisible typing rules or language specifics that I
>>>> don't know about.
>>>> * Maybe, but wouldn't the compiler complain if it expected a
>>>> Core.Std.List.t and got a list instead?
>>>
>>>
>>> --
>>> Regards,
>>> Francois.
>>> "When in doubt, use more types"
>>>
>>> --
>>> 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
>>
>>
>

      reply	other threads:[~2015-06-26 16:57 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-06-24 16:02 Kenneth Adam Miller
2015-06-25  7:55 ` Francois Berenger
2015-06-26  6:34   ` Ben Millwood
2015-06-26 13:09     ` Kenneth Adam Miller
2015-06-26 16:57       ` Yaron Minsky [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CACLX4jSMJNR0orDE9zn4br+i5QQAO=+3608UW7XpqAsXn5jOMg@mail.gmail.com' \
    --to=yminsky@janestreet.com \
    --cc=bmillwood@janestreet.com \
    --cc=caml-list@inria.fr \
    --cc=francois.berenger@inria.fr \
    --cc=kennethadammiller@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).