caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
From: Yawar Amin <yawar.amin@gmail.com>
To: Lorenzo Pomili <lorenzo.pomili85@gmail.com>
Cc: Ocaml Mailing List <caml-list@inria.fr>
Subject: Re: [Caml-list] Run time error on exception
Date: Wed, 31 Jan 2018 16:35:14 -0500	[thread overview]
Message-ID: <CAJbYVJKTuJJmSO7My7N4YTPMr3ahDE1io74oAjSQ4QmCwwoY3A@mail.gmail.com> (raw)
In-Reply-To: <CALJ6Lmg2yEGCbeFM2ojcQdV-24xxa2Mpkj9JAtC58yTxHeuJXw@mail.gmail.com>

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

Hi Lorenzo,

On Wed, Jan 31, 2018 at 4:14 PM, Lorenzo Pomili <lorenzo.pomili85@gmail.com>
wrote:

> Friend of mine, pointed out to me a case in Reason who cause no compile
> time error but run time error, I had reimplemented similar case in OCaml:
>

Runtime errors are very much possible in OCaml/Reason, OCaml does not make
any guarantees about runtime errors in general. The only guarantee OCaml
makes is that you won't get runtime *type* errors (with a couple of known
exceptions). In other words, if your program compiles (passes typechecking)
it won't throw a type error when it runs.

exception Generic_exc;;
>
> let string_of_string s = string_of_int (int_of_string s)
>
> let foo = string_of_string "foo"
>
> let fun_exeption x =
>     match x with
>     0 -> 0
>     | _ -> raise Generic_exc
> ;;
>
> let bar = string_of_int (fun_exeption 5)
>
> both foo and bar don't fail at compile time fail at run time,
>

Yeah, it makes sense that they don't fail at compile time, because they
pass typechecking according to the OCaml typing rules.


> me and my friend also try to reimplement similar case (the first one with
> string and int) in Elm, and Elm compiler just say you have to manage
> exeption, because function can actualy return exeption instead of int.
>

Elm tries to disallow *all* runtime errors (not just runtime type errors),
so it uses various techniques like using the Maybe and Result types to
indicate failed operations. And it makes you handle the possibility of
failure up-front. This is really nice, and you can also do this in OCaml,
but generally it is opt-in, e.g. you can use List.find (which raises an
exception if it doesn't find the item) or List.find_opt (which returns an
option containing the result of the list search).

There is a compile params or similar for check this kind of error? is a
> side effect of have a multi-paradigm? and if is it, how to manage it?
>

You have to manage it manually, and use various techniques to help. For
example, there's a nice pattern-matching technique you can use to return
values even after handling exceptions:

    let bar = string_of_int (match fun_exeption 5 with
    | int -> int
    | exception Generic_exc -> 0)


> I belive I can use OCaml in functional way without just making attention
> to not use side effect but if use of function like int_of_string can make
> run time error, I probably approac to OCaml in wrong way, and I wanna
> understand how to correct it.
>

OCaml is a mix between safety and pragmatism, it doesn't take the extreme
safety approach that Elm does. There are ups and downs to both approaches,
you would have to decide which is best for you.

Regards,

Yawar

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

  reply	other threads:[~2018-01-31 21:35 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-01-31 21:14 Lorenzo Pomili
2018-01-31 21:35 ` Yawar Amin [this message]
2018-02-01  7:10 ` Malcolm Matalka
2018-02-04 18:14   ` Lorenzo Pomili
2018-02-05 10:49     ` Malcolm Matalka
2018-02-05 15:26     ` Yawar Amin

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=CAJbYVJKTuJJmSO7My7N4YTPMr3ahDE1io74oAjSQ4QmCwwoY3A@mail.gmail.com \
    --to=yawar.amin@gmail.com \
    --cc=caml-list@inria.fr \
    --cc=lorenzo.pomili85@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).