caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
From: Kenneth Adam Miller <kennethadammiller@gmail.com>
To: Ben Millwood <bmillwood@janestreet.com>
Cc: Francois Berenger <francois.berenger@inria.fr>,
	caml users <caml-list@inria.fr>
Subject: Re: [Caml-list] Core Overlay
Date: Fri, 26 Jun 2015 09:09:17 -0400	[thread overview]
Message-ID: <CAK7rcp95yZV3XinrQbxh7+i3dBT-Y1DGG3VkuYGmTOyOUhwbOQ@mail.gmail.com> (raw)
In-Reply-To: <CA+MHO50PNYpPYKov0fjP+h0i0c0US6_SWdGn-cw8g+qOfmBUPw@mail.gmail.com>

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

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
>>
>
>

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

  reply	other threads:[~2015-06-26 13:09 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 [this message]
2015-06-26 16:57       ` Yaron Minsky

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=CAK7rcp95yZV3XinrQbxh7+i3dBT-Y1DGG3VkuYGmTOyOUhwbOQ@mail.gmail.com \
    --to=kennethadammiller@gmail.com \
    --cc=bmillwood@janestreet.com \
    --cc=caml-list@inria.fr \
    --cc=francois.berenger@inria.fr \
    /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).