Started a new draft
This commit is contained in:
parent
3d79f20371
commit
a56725d09f
1 changed files with 66 additions and 0 deletions
66
src/drafts/abstractions-haskell-vs-clojure/index.org
Normal file
66
src/drafts/abstractions-haskell-vs-clojure/index.org
Normal file
|
@ -0,0 +1,66 @@
|
||||||
|
#+title: Abstractions; Haskell vs Clojure
|
||||||
|
#+subtitle: How are both Haskell and Clojure good to capture some abstractions
|
||||||
|
#+date: [2020-01-18 Sat]
|
||||||
|
#+created: [2020-01-18 Sat]
|
||||||
|
#+author: Yann Esposito
|
||||||
|
#+EMAIL: yann@esposito.host
|
||||||
|
#+keywords: Haskell, Clojure, programming, fp
|
||||||
|
#+DESCRIPTION: Simulate some abstractions in Clojure vs Haskell
|
||||||
|
#+OPTIONS: auto-id:t toc:t
|
||||||
|
#+STARTUP: overview
|
||||||
|
|
||||||
|
#+begin_notes
|
||||||
|
This is a short essay to try to find if Haskell is as limited in its
|
||||||
|
abstractions power as I experienced many times when learning it.
|
||||||
|
Now I've got a lot more experience in Haskell and in Clojure.
|
||||||
|
I would like to see if I'll be able to manage to put some abstractions in
|
||||||
|
Haskell and in Clojure.
|
||||||
|
#+end_notes
|
||||||
|
|
||||||
|
* Abstractions
|
||||||
|
:PROPERTIES:
|
||||||
|
:CUSTOM_ID: abstractions
|
||||||
|
:END:
|
||||||
|
|
||||||
|
The notion of abstraction is generally not pretty well defined.
|
||||||
|
|
||||||
|
For example, not using pointer can be considered an abstraction.
|
||||||
|
Garbage collection is an abstraction.
|
||||||
|
Procedures are an abstraction.
|
||||||
|
ORM are an abstraction.
|
||||||
|
Monads are an abstraction.
|
||||||
|
Objects and Classes are an abstraction.
|
||||||
|
|
||||||
|
I would be surprised is not anyone has made a kind of hierarchy to organize
|
||||||
|
different abstractions as they seems to me of different nature.
|
||||||
|
|
||||||
|
In this post I will only focus on those few abstractions:
|
||||||
|
|
||||||
|
- Object Oriented Programming (Objects and Classes, inheritence, etc...)
|
||||||
|
- Frameworks for managing the lifecycle and dependencies of software
|
||||||
|
components with have runtime state (in Clojure: Component or Trapperkeeper)
|
||||||
|
- ORM/Store abstractions
|
||||||
|
|
||||||
|
* Object Oriented
|
||||||
|
:PROPERTIES:
|
||||||
|
:CUSTOM_ID: object-oriented
|
||||||
|
:END:
|
||||||
|
|
||||||
|
So in Clojure, this is quite straightforward if you consider you are
|
||||||
|
authorized to use the underlying language (java).
|
||||||
|
|
||||||
|
** Haskell
|
||||||
|
:PROPERTIES:
|
||||||
|
:CUSTOM_ID: haskell
|
||||||
|
:END:
|
||||||
|
|
||||||
|
Notion of Object, something that contain an inner state + some methods.
|
||||||
|
Notion of Class, a boilerplate for creating new Objects.
|
||||||
|
|
||||||
|
#+begin_src haskell
|
||||||
|
newtype MethodName = MethodName Text
|
||||||
|
data Object s m = Object { state :: s
|
||||||
|
, methods :: forall a. MethodName -> s -> a }
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
hmmm.... At the very begining of trying to write it down, it already suck...
|
Loading…
Reference in a new issue