7 karma · joined March 31, 2026
Sure I could read the same book on my phone, but it takes multiple steps to open the e-reader app on my phone. On top of that, there are half a dozen other things I could open on my way to opening up my e-reader app. With X4, I press the button on the side and I'm reading.
Is it the best ereader? Not at all. Reading whitepapers or programming books on it is a fools errand. It is great for anything that is mostly text. Novels are amazing on it. I've keep up with my read it later backlog by saving URLs with the Obsidian ReadItLater plugin and then using pan to convert the collection of markdown into an epub file.
The battery life is amazing. I've charged it once since getting on 3/27. I've read about 1500 pages (5 novels) since I got it (albeit I've stalled out in June by trying to finish a book I'm not too into).
It is a great compliment to a 10" tablet. Whereas a 7" reader tends to stay at home due to its size, the X4 gets tossed in my pocket and comes everywhere with me.
The X4 is so small that I can throw it in my pocket and read a page or two when I'm waiting for something instead of doomscolling on my phone. I love that little thing. I've read two books since 3/27 and I'm halfway through my 3rd book.
One thing that I don't see is a way to mitigate the "andThen" pyramid of doom.
This happens when you have a language without early returns and you have chain multiple Result returning operations. You can use nested case expressions:
case operation1 x of
Ok value -> case operation2 value of
Ok value2 -> value2
Err msg -> "error from operation2: " ++ msg
Err msg -> "error from operation1: " ++ msg
Or nested `andThen` calls operation1 x
>> mapError (\msg -> "error from operation1: " ++ msg)
>> `andThen` (\value -> operation2 value)
>> mapError (\msg -> "error from operation2: ++ msg)
This is nicer to read, but still a lot of noise.Haskell has `do` notation to alleviate this but that brings with it the type-class that shall not be named.
Some languages, like Rust, introduce different per-type syntactical solutions such as `async/await` for Promises and `?` for Result.
I particularly like Gleam's `use` notation, which is syntactical sugar around functions that take a callback as their final argument.
Do you have a solution for this in Sky?