- Types are declared with
:
and not::
, and the consing operator conversely is::
instead of:
- No
where
clauses, onlylet/in
- The standard style is different, check http://elm-lang.org/docs/style-guide for reference
- Multiline strings are a thing with
"""
- Haskell's
data
corresponds totype
in Elm, and also, Haskell'stype
corresponds to Elm'stype alias
($)
is(<|)
, but you don't use it all that much – Elm people like the flipped operator(|>)
which lets you build something that reads like a pipeline- Related: Backticks will likely die soon in favour of functions that have an argument order that lends itself to pipelining with
(|>)
- Also,
(.)
is(<<)
, and a flipped version(>>)
exists, but I don't see it used that much either (>>=)
is not an available operator and would not be polymorphic (no typeclasses, see below), and is instead commonly namedSomeType.andThen
– e.g.Maybe.andThen : Maybe a -> (a -> Maybe b) -> Maybe b
Code is clean if it can be understood easily – by everyone on the team. Clean code can be read and enhanced by a developer other than its original author. With understandability comes readability, changeability, extensibility and maintainability.
- Follow standard conventions.
- Keep it simple stupid. Simpler is always better. Reduce complexity as much as possible.
- Boy scout rule. Leave the campground cleaner than you found it.
- Always find root cause. Always look for the root cause of a problem.
type StringBool = "true"|"false";
interface AnyNumber { prev?: any, isZero: StringBool };
interface PositiveNumber { prev: any, isZero: "false" };
type IsZero<TNumber extends AnyNumber> = TNumber["isZero"];
type Next<TNumber extends AnyNumber> = { prev: TNumber, isZero: "false" };
type Prev<TNumber extends PositiveNumber> = TNumber["prev"];
This is the first post of a series about Algebraic Effects and Handlers.
There are 2 ways to approach this topic:
- Denotational: explain Algebraic Effects in terms of their meaning in mathematics/Category theory
- Operational: explain the mechanic of Algebraic Effects by showing how they operate under a chosen runtime environment
Both approaches are valuables and give different insights on the topic. However, not everyone (including me), has the prerequisites to grasp the concepts of Category theory and Abstract Algebra. On the other hand, the operational approach is accessible to a much wider audience of programmers even if it doesn't provide the full picture.
This is the second part of a series about Algebraic Effects and Handlers.
- Part 1 : continuations and control transfer
- Part 2 : Capturing continuations with Generators
- Part 3 : Delimited continuations
- Part 4 : Algebraic Effects and handlers
Note: initially I planned a 3-part series, but since the current post on undelimited continuations ended up taking
For every developer, terminal is their weapon, so why don't you customize it to become a powerful, and a beautiful weapon?
Powerline style refers to a terminal style that helps developer to keep track of their workflow easily, allows them to have perfect visual on current directories and new changes. It is also git recognizable, and failure detector that will help your development process becomes more interact and much faster.
In this guideline, I will introduce you with 2 smart shells: Zsh
and Fishshell
. Both are perfect for the development jobs due to its rich of resources, and user-friendly.
use std::str; | |
fn main() { | |
// -- FROM: vec of chars -- | |
let src1: Vec<char> = vec!['j','{','"','i','m','m','y','"','}']; | |
// to String | |
let string1: String = src1.iter().collect::<String>(); | |
// to str | |
let str1: &str = &src1.iter().collect::<String>(); | |
// to vec of byte |
-- comments | |
--| doc comments (default markdown) | |
--| prefix | prefixed comments | |
--[ block comment | |
]-- | |
--[ prefix | | |
prefixed block comment | |
]-- |
See also List of materials about Software Design in Haskell
Junior | Middle | Senior | Architect | |
---|---|---|---|---|
Haskell level | Basic Haskell | Intermediate Haskell | Advanced Haskell | Language-agnostic |
Haskell knowledge scope | Learn you a Haskell | Get programming with Haskell | Haskell in Depth | Knows several languages from different categories |
Get programming with Haskell | Haskell in Depth | Functional Design and Architecture | ||
Soar with Haskell | [Soar |