A new user shares his experience

Hi all. This is some feedback from a new user before I forget what it’s like to be a new user.

(I had to break all the URLs below because new users can’t post more than two links!)

The hook.

I was looking for a statically typed language for web development. I’m sick of dynamically typed languages and everybody here probably understands my frustrations.

I’m also looking for a language where HTML (and hopefully JSON and XML) are DSLs within the language, so they can take advantage of static typing and IDE support.

After some research, I discover:

  • Typescript
  • Elm
  • Purescript
  • Haskell

I already know Typescript to a basic level and to be fair, I’ll probably still choose it at work because you can easily employ programmers. This language itself is based on the premise of “we took Javascript and made it less shitty”, which doesn’t get me excited.

Purescript looks okay, maybe a bit complicated. I might try it out later. Haskell for the web looks like hard work with experimental compilers so I’ll shelve that for the meanwhile.

Elm advertises really good error messages. I really like that idea. So here I am.

The website, http://www.elm- lang. org/

I want to see a demo of what Elm can do so I know whether it’s any good. My first view of Elm is “No Runtime Exceptions”. That’s not a huge selling point for me. What I want is easy website layout (elm-ui discovered!) and lots of “UI components” to choose from. I was expecting to maybe see a slideshow banner showcasing sites made with Elm (e.g. https:// madewithreactjs .com/ but as a banner), and maybe something like https:// material. angular. io /components/categories.

I’m looking at the front page trying to work out if this language is any good or not. I look at the examples. The first one is “Hello, world”, which is expected. I’m really impressed by the online editor! After that… well, they’re good as some really basic code for beginners, but there’s stuff missing.

The “Forms” example should have all the HTML form elements: buttons, radio buttons, select boxes, textareas. I want to see example code of how to make them all.

There’s no layout demo. I want to see a notification dialog. I want to see a modal window. I want to see a collapsible pane. I want to see a small floating icon that I can click on to do something. I want to see a context menu. I might write some of these demos myself.

So at this stage I’m thinking that if I use Elm, I have to make all this reusable componentry from scratch.

I recommend putting a picture and link to the SPA demo on the front page, and maybe ask some happy customers if you can link to their pretty Elm websites.

Where do I report compiler bugs? Where is Elm’s Git repository and issue tracker? I think these should be there as well.

Following the tutorial

This is a pretty good tutorial! I had a working web app in minutes, which is far more than I could say about a Java Servlet tutorial. I’m loving the online editors!

You need to add “module XXX exposing (…)” to the top of each example before Elm 19 will accept it.

I don’t usually have high expectations of tutorials, and I usually expect them to get somebody to only a rudimentary level of competence with a language. After that, I’d expect to have to rough it by reading technical specs, package documentation, StackOverflow posts, or optionally purchase a book.

By the way, where is the official Elm language reference?

There are a few Elm books out there. I recommend linking to them at the end of the tutorial.

Installation

It’s not in the Debian repository!. That means I have to do it the hard way. Well; npm is already installed so I can just use that.

So I go to the main website… where’s the “Download” or “Install” link!? I remember some info in the guide, and I find a download link in there, but please put this on the front page!

I download it and get… a single executable file. I can’t fault you for keeping your packages small! I guess I can live without configuration files and a man page.

Now, I’m a fan of Microsoft’s Visual Studio code. I understand it’s not the author’s first choice. I spend some time staring at the list of “Elm” plugins, trying to work out which of the 9 options that come up is the currently supported one with a language server. Anyway, after a bit of interaction with npm and restarting the editor, I have it configured with elm-format, elm-analyse, elm-test. It works really well. I save, and get a bajillion error messages immediately which is a hundred times better than getting them at runtime.

My next question is… how do you use a debugger? I see the time travel debugger which looks awesome and I haven’t tried yet, but how do you create breakpoints, step through your code and inspect variables the old-fashioned way?

So… no complaints about installation. I mean, it’s a single executable file. There’s very little, literally, to complain about.

What I’m going to do

I want to implement the OData protocol (http:// www. odata .org) and make some UI components for it. This involves:

  • Making a URL creater. There’s an ABNF available.
  • Lots of XML. There are DTDs available.
  • Lots of JSON. There is a JSON schema available.

Last night I got some basic XML stuff working, which is a good start. However, the protocol is huge and I’m hoping there are tools to convert DTDs and schemas into parsers and generators. If not, I guess I’ll be porting them from Haskell or writing them myself?

9 Likes

Not sure if you’ve come across http://builtwithelm.co/ yet. It has a good variety of projects all built with Elm

5 Likes

That’s really impressive! I would never have found it.

There are some XML parsers that work along similar lines to the JSON Encoder/Decoder concept you find in Elm. As far as I know, there are no packages with support for DTD or XML Schema yet. Its probably fair to say that XML isn’t such a popular format in Elm, given that web APIs are more often JSON based.

2 Likes

Elm does not have “UI components” but I feel like this is a weak point. From what I can tell Elm uses types instead of components and reusable views for different representations of a type.

Yeah, I feel you. I started working on a package that tries to put all useful “components” into one package. To see how a more Elm-like approach to components would actually look like. But I’m still struggling.

Right now the best way to find a list of Elm-“components” is over at the Elm Catalog under the “UI:UI widgets & patterns” list.

2 Likes

These resources needs links from the Elm language website! Elm is far more advanced than is apparent from visiting https://elm-lang.org and searching through the official packages.

That catalogue is pretty decent! Even if the code I find there is a bit buggy, it still gets me further ahead than starting from scratch.

I think the difficulty may be that a lot of these resources are not official resources. For example madewithreactjs.com isn’t associated with Facebook and as such they don’t link to it on the React website. The core team AFAIK is trying to let the community make resources (tutorials, guides, frameworks, etc) as well as to let the community decide which of the resources are best to point new users towards.

This isn’t a dismissal of the challenges you’ve had with finding these resources. I personally feel that this partially falls on the community, which includes me. I could do a better job of both creating resources as well sharing existing resources.

But that’s just my opinion, and I’m certain everyone wouldn’t agree.

2 Likes

This topic was automatically closed 10 days after the last reply. New replies are no longer allowed.