DEV Community

Discussion on: Creating a todo app in Elm

Collapse
 
robinheghan profile image
Robin Heggelund Hansen • Edited

This is awesome stuff, @selbekk ! Really well written :)

I just thought I'd add a small note regarding type vs type alias.

A type alias is just that, an alias. The actual type is what comes after =.

That means that everywhere you use Model in type signatures, you could actually use the record type { todos: List Todo ... } instead and it would look the same to the compiler. You're essentially just giving a type another name.

type on the other hand actually creates a new type. So...

type Money = Money Int

sum : Money
sum = Money 5

type Celsius = Celsius Int

temp : Celsius
temp = Celsius 5

-- Celsius /= Money
-- sum /= temp


type alias Money = Int

sum : Money
sum = 5

type alias Celsius = Int

temp : Celsius
temp = 5

-- Celsius == Money == Int
-- sum == temp

When it comes to use. Type aliases are often used to shorten types or make them more readable. Records is one example of this, but also:

type Person = Person FirstName LastName

type alias FirstName = String

type alias LastName = String

-- Is more readable than, but also the equivalent of...

type Person = Person String String
Collapse
 
selbekk profile image
selbekk

Ah, that's a really nice way to show the difference between the two! Thanks a ton for taking the time to clarify this - and thanks for all the great work you do with the Elm language.