Skip to content
Robert Peszek edited this page Sep 22, 2013 · 1 revision

Revisited 2013.8.31

Fpiglet is my evening and weekend project and I would like it to be full of unrestricted creativity. With that said here are somewhat structured near term goals for the project and some longer term ideas:

Shorter Term post release 0.1

  • Git/GitHub migration
  • deploy artifacts to some central repo
  • Evaluate Groovy community interest

Longer Term Ideas

  • Monad Transformers. Combining monads may not be as important for Groovy functional developer as it is in Haskell, but if we have monads, we should be able to add them up.
  • Monoid concept.
  • More built-in monads and additive monads.
  • Haskell support for transnational memory computing is simply beautiful (http://research.microsoft.com/pubs/74063/beautiful.pdf). Clojure can be used as a jar in Java. I believe STM in Haskell and Clojure are not the same. But could I wrap Clojure as a monad in Fpiglet to get a real cool STM monad for coding STM in Groovy?
  • More property based testing/QuickCheck - like tests.
  • It would be super-cool to do something in Groovy about FRP. Functional Reactive Programming looks very interesting.
  • Arrow concept. Not just because of FRP but for its own sake. http://www.cse.chalmers.se/~rjmh/Papers/arrows.pdf
  • Pattern matching and function builders DSL (even with Fpiglet 0.1, monadic comprehension is already a nice function builder!)
  • functional tools for writing DSLs (Groovy DSL creation is very imperative)
  • Recode curried function support in Java for better performance. Long term, Fpiglet curried functions may be influenced by this Groovy JIRA: https://jira.codehaus.org/browse/GROOVY-4998 and by Java 8.

Other maybe ideas:

  • Should zippers be supported?

  • Stronger typing with functional code is very, very helpful. Once you get your function signature right your code often starts working. Investigate ways to provide more descriptive error information and maybe investigate strong compilation features in Groovy? Java type system is not well designed for functional stuff, so I do not know, maybe untyped approach is better.

I will evaluate this list as I move forward.

Clone this wiki locally