Skip to content

Releases: witchcrafters/witchcraft

Monads (and reorganize)

12 Sep 12:30
Compare
Choose a tag to compare
Pre-release

Monads

Finally, monads! Still could use more documentation, but they're here and they work 😄

[1, 2, 3] >>> fn x ->
  [x + 1] >>> fn y ->
    [y * x, y * 10, x - 1]
  end
end
#=> [2, 20, 0, 6, 30, 1, 12, 40, 2]

[1, 2, 3]
>>> fn x -> [x + 1] end
>>> fn y -> [y * 10, y - 1] end
#=> [20, 1, 30, 2, 40, 3]

Of course they work on things other than lists. I'll will be moving the ADT-specifc implementations to Algae, so if you want Maybe, Either, and friends, please use it in conjunction with that library.

Major Reorganization

Still a bunch more to do, but this is already much better. Merging to master, and will continue to tighten stuff up and work through the roadmap.

Applicative Functor

12 Jan 08:52
Compare
Choose a tag to compare
Applicative Functor Pre-release
Pre-release

Applicative Functors are here!

Things to note:

  • wrap (i.e.: pure) & apply are here!
    • Operator for apply: <<~ and ~>>
    • Reversed operator arrow direction for consistence with Elixir
      • ie: in Haskell we think about applyping "over" things (apply [(+1)] [1,2,3])
      • In Elixir, we're piping thing into the application ([1,2,3] ~>> [&(&1 + 1)])
      • Can still write in the Haskell order, with reversed operators:
        • Haskell: (\x y -> x + y) <$> [1,2,3] <*> [4,5,6]
        • Elixir: &(&1 + &2) <~ [1,2,3] <<~ [4,5,6]
  • Have to exclude Kernel.apply for modules
    • In the future, we will either need to create a use, or rename apply (probably the later)

Functor

08 Nov 21:43
Compare
Choose a tag to compare
Functor Pre-release
Pre-release

Functor protocol, functions, and spot-check helpers

  • Only the covariant functor, more varieties will follow

Monoid

29 Oct 17:17
Compare
Choose a tag to compare
Monoid Pre-release
Pre-release

First draft of the Monoid protocol