# Qian : my first Elm project

**URL:** <https://discourse.elm-lang.org/t/qian-my-first-elm-project/801>\
**Category:** Show and Tell\
**Created:** [March 6, 2018, 1:49pm UTC](https://discourse.elm-lang.org/t/qian-my-first-elm-project/801 "2018-03-06T13:49:04Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![xvw](https://yyz1.discourse-cdn.com/flex035/user_avatar/discourse.elm-lang.org/xvw/32/464_2.png) [@xvw](https://discourse.elm-lang.org/u/xvw)\
**Post date:** [March 6, 2018, 1:49pm UTC](https://discourse.elm-lang.org/t/qian-my-first-elm-project/801/1 "2018-03-06T13:49:04Z")

</div>

Hi there !  
Months ago, I wrote my first Elm program. It is a File explorer that uses Electron.  
The global feedback of this experience is that Elm is really enjoyable to write UI and the “ports” are really usefull to write unsafe code.

The project lives here : [https://github.com/xvw/qian](https://github.com/xvw/qian)  
I am currently working on the roadmap for the 2th version where the ports will be written in OCaml. A bit like what I started here: [https://github.com/phutur/neige](https://github.com/phutur/neige)

Feel free ton contribute and and make some feedbacks (if you have the time).

See ya !

---

<div class="post-metadata">

**Author:** ![ghivert](https://yyz1.discourse-cdn.com/flex035/user_avatar/discourse.elm-lang.org/ghivert/32/630_2.png) [@ghivert](https://discourse.elm-lang.org/u/ghivert)\
**Post date:** [March 6, 2018, 2:02pm UTC](https://discourse.elm-lang.org/t/qian-my-first-elm-project/801/2 "2018-03-06T14:02:28Z")

</div>

Hi!

Glad to see something like this, really cool!

Why OCaml and not PureScript for the ports? I mean, PureScript philosophy is nearest from elm than OCaml. In OCaml, you have object, you don’t have the Eff monad, etc. My first intuition would be to go with PS, so maybe OCaml is a better choice? 🙂

Anyway, good work!

---

<div class="post-metadata">

**Author:** ![xvw](https://yyz1.discourse-cdn.com/flex035/user_avatar/discourse.elm-lang.org/xvw/32/464_2.png) [@xvw](https://discourse.elm-lang.org/u/xvw)\
**Post date:** [March 6, 2018, 2:26pm UTC](https://discourse.elm-lang.org/t/qian-my-first-elm-project/801/3 "2018-03-06T14:26:15Z")

</div>

> Glad to see something like this, really cool!

Thanks !

> Why OCaml and not PureScript for the ports?

I chose OCaml because I love OCaml 🙂 and to be honest, I am more comfortable with OCaml than with PureScript. (But PureScript is on my short-time-todo-list).

> In OCaml, you have object

Yes, and Object fit very well with the JavaScript environement. But be reassured, you can write pure-object without state-mutation 😉

> you don’t have the Eff monad

I could handle dynamic effects using free monad (or be patient and wait for [multicore and his effect handler](https://github.com/ocamllabs/ocaml-effects-tutorial)).

In addition, syntax extensions of OCaml (via ppx) could generate me the module “port” Elm to guarantee a good typing between ports.

But the main reason is that I really love OCaml ^^

---

<div class="post-metadata">

**Author:** ![ghivert](https://yyz1.discourse-cdn.com/flex035/user_avatar/discourse.elm-lang.org/ghivert/32/630_2.png) [@ghivert](https://discourse.elm-lang.org/u/ghivert)\
**Post date:** [March 6, 2018, 2:44pm UTC](https://discourse.elm-lang.org/t/qian-my-first-elm-project/801/4 "2018-03-06T14:44:38Z")

</div>

That’s an excellent reason! 🙂
