Sticking with Types, we dive deeper with sum and product types, we hit on Semigroup and start to unwind Monoids!
Now on to programming with Types, Things are getting pretty good.
Algebraic data types: a composite type, meaning, any types that can be made by combining other types.
and / product types: combining two or more types, very common. nearly all languages have support for these. Structs in C. This can often be the only way to make new types.
This is the basis for class hierarchies. abstracting out what they have similar, and move downward. “real life is full of extreme edge cases”
Side note about data and declaring, or forming the data.
I really thought FP was function driven. But I’m not so sure I’d say that today. Yes yes functions as values are super important, but they more enable us to really focus on the structure and transformation of data, instead of actions or events on that data.
or / sum types: > In computer science, a tagged union, also called a variant, variant record, choice type, discriminated union, disjoint union, or sum type,
can take on several different, but fixed types. Like Bool
An instance of Bool can be either True or False
That Bool is a set containing all values True, False
Kinda like enums ? > An enumerated type can be seen as a degenerate case: a tagged union of unit types. It corresponds to a set of nullary constructors and may be implemented as a simple tag variable, since it holds no additional data besides the value of the tag.
datatype tree = Leaf | Node of (int * tree * tree)
Composability: creating something new by combining two like things together.
Like concat 2 lists together.
HOF that’s just a ( . ) called compose
last = head . reverse
Semigroup: type class with one important method the
<> for combining instances that are of the same type.
(<>) : : Semigroup a => a -> a -> a
takes a value of type a, we don’t care what it is. and another of the same type, and returns a value that is of the same type as
a, whatever that was to begin with.
Guards: do some computation on the arguments that are going to be compared.