Clojurians
#clojure-italy
<
2018-04-05
>

This page is not created by, affiliated with, or supported by Slack Technologies, Inc.

bronsa08:04:01

retweet sarebbero apprezzati :)

reborg08:04:20

wow, congrats @bronsa & colleghi, roba extra spessa. Bel write-up (almeno l'ho capito anch'io)

nilrecurring09:04:14

Oh wow congrats @bronsa, roba fichissima

gabriele.carrettoni09:04:38

@bronsa invidia a palate :smile:

manuel09:04:01

@bronsa meraviglia

reborg09:04:15

Stavo dando un occhio a Toccata https://github.com/Toccata-Lang/toccata qualcuno l'ha mai provato?

skuro09:04:42

@reborg mai provato, ma obligatory trolling link: https://github.com/fmota/fuga

gabriele.carrettoni10:04:26

che voi sappiate esiste un esempio per un linguaggio minimale su Graal/Truffle usando clojure e non java?

bronsa10:04:09

in #off-topic ne stavamo parlando io @ghadi @tbaldridge e @schmee proprio l'altro giorno

reborg10:04:29

questo lisp ci va molto vicino http://cesquivias.github.io

reborg10:04:22

(ma usa Java per farlo se e' quello che intendi @gabriele.carrettoni)

gabriele.carrettoni10:04:18

@reborg grazie del link, ma cercavo qualcosa tipo quello ma in clojure

reborg10:04:57

Questo proof of concept https://github.com/jduey/crawl/blob/master/src/crawl/HIR.clj replica in Clojure il procedimento che usa Graal per parsare il bytecode (che sarebbe il mio approccio preferito al problema, saltando Truffle)

gabriele.carrettoni10:04:50

@reborg me lo guardo grazie

reborg10:04:37

(c'e' un po' di prosa nel blog post relativo http://www.clojure.net/2012/05/01/New-Project/)

bronsa10:04:42

usare monadic style in clojure nella mia esperienza è un disastro FYI

reborg10:04:57

si si salta pure le monads a pie' pari

gabriele.carrettoni10:04:38

non vedo il senso delle monadi in un linguaggio dinamico sinceramente

gabriele.carrettoni10:04:02

non capisco perché la mania funtori, monadi & co stia arrivando su clojure :zipper_mouth_face:

reborg10:04:12

In realta' non e' mai arrivata. C'e' qualcuno ogni tanto che apprezza e ci fa qualcosa, ma non e' idiomatico

gabriele.carrettoni10:04:31

meno male, vedo ogni tanto articoli che ne parlano

gabriele.carrettoni10:04:41

ma non li capisco mai (non il contenuto, il senso)

nilrecurring10:04:23

L’unico use case per le monadi in clojure che ho incontrato finora è la Try monad, che è l’equivalente del do con Maybe in Haskell

reborg10:04:05

@bronsa avresti un link (o libro) dove posso vedere una panoramica dei vari stili di parsing funzionali e no? Tipo il dragon book e' buono per questo?

nilrecurring10:04:10

Se vuoi concatenare delle operazioni che possono ritornarti degli errori (e vuoi ritornare l’ultimo errore) passando i risultati intermedi nelle operazioni successive, mlet (monadic let) + exception (la Try monad in cats) è l’unico modo sano

bronsa10:04:01

@reborg niente off the top of my head, il dragon book meh, è un po' datato e non è funzionale per niente

bronsa10:04:19

se vuoi leggiti il paper su parsing with derivatives di mmight

reborg10:04:05

trovato grazie

reborg10:04:36

@nilrecurring hai un esempio in clojure dove e' stato fatto "male"?

nilrecurring10:04:16

Avevo postato questa cosa su un thread in ML, lo ripesco

reborg10:04:36

senza fretta thx

gabriele.carrettoni11:04:41

@nilrecurring ma Try non dovrebbe essere Either?

nilrecurring11:04:08

È una specializzazione di Either

nilrecurring11:04:51

Spiega la differenza nella doc: (che ho linkato sopra) > It represents a computation that may either result in an exception or return a successfully computed value. Is very similar to the Either monad, but is semantically different. > It consists of two types: Success and Failure. The Success type is a simple wrapper, like Right of the Either monad. But the Failure type is slightly different from Left, because it always wraps an instance of Throwable (or any value in cljs since you can throw arbitrary values in the JavaScript host).

nilrecurring11:04:17

Il punto è che Either propaga l’errore come una condizione programmatica normale, mentre un sacco di librerie sulla JVM tirano eccezioni per segnalare condizioni di “errore” (perchè il type system non è sufficiente per esprimerle correttamente). Quindi la Try è sostanzialmente Either che wrappa il tutto in un try/catch