Skip to content

Instantly share code, notes, and snippets.

@runarorama
Created April 22, 2013 16:31
Show Gist options
  • Save runarorama/5436518 to your computer and use it in GitHub Desktop.
Save runarorama/5436518 to your computer and use it in GitHub Desktop.
Scalaz Google Code page
<b>The source for Scalaz is now hosted on !GitHub - http://github.com/scalaz/scalaz</b>
Scalaz is a library written in the [http://scala-lang.org/ Scala Programming Language]. The intention of Scalaz is to include general functions that are not currently available in the core Scala API. The scalaz-core module depends only on [http://www.scala-lang.org/docu/files/api/index.html the core Scala API] and the core Java 2 Standard Edition API. Scalaz is released under a BSD open source licence making it compatible with the licence of the Scala project.
[http://code.google.com/p/scalaz/wiki/Scalaz6 Scalaz 6.0.4] was released in January 2012, targeting Scala 2.8.1, 2.9.0.1, 2.9.1 and 2.10.0-M1. [http://scala-tools.org/repo-releases/org/scalaz/scalaz-full_2.9.1/6.0.4/scalaz-full_2.9.1-6.0.4.jar Full download for 2.9.1]
[Scalaz7 Scalaz 7] is currently being developed. This is a rewrite to address the challenges posed by type class inheritance. The first release of this series is expected in April 2012.
== Community ==
* [http://groups.google.com/group/scalaz Mailing list]
* IRC channel: #scalaz channel on [http://freenode.net/ the freenode network]
* irc://freenode.net/#scalaz
* [http://webchat.freenode.net/?channels=scalaz Web IRC Access]
== Presentations ==
* [http://vimeo.com/10482466 Deriving Scalaz] Nick Partridge at the Melbourne Scala User Group
* [http://docs.google.com/present/view?id=ddmk3f43_63zpg3jcgz Beyond Mere Actors] Concurrent Programming with Scalaz, Rúnar Bjarnason
* [http://vimeo.com/17626682 Scalaz Actors] Tom Adams at Brisbane Functional Programming Group
* [http://www.youtube.com/playlist?p=PLEDE5BE0C69AF6CCE Lenses: A Functional Imperative] Edward Kmett at Boston Area Scala Enthusiasts 24/05/2011
* [http://www.youtube.com/watch?v=Jg3Uv_YWJqI] Scalaz State Monad
* [http://skillsmatter.com/podcast/scala/practical-scalaz-2518] Practical Scalaz: making your life easier the hard way
* [http://marakana.com/s/video_monad_transformers_in_scalamachine_scaliak,1232/index.html] Monad Transformers in Scalamachine & Scaliak
==Tutorials==
* [http://eed3si9n.com/learning-scalaz-day1] Learning Scalaz series
* [https://github.com/jrwest/learn_you_a_scalaz] Learn you a Scalaz
* [http://skillsmatter.com/podcast/scala/practical-scalaz-3255] Practical Scalaz: Using One of Scala's Most Controversial Libraries
* [http://www.lunatech-research.com/archives/2012/03/02/validation-scala] Validation in Scala
* [http://apocalisp.wordpress.com/2010/10/17/scalaz-tutorial-enumeration-based-io-with-iteratees/] Scalaz Tutorial: Enumeration-Based I/O with Iteratees
==Links==
* [http://scalaz.github.com/scalaz/scalaz-2.9.1-6.0.4/doc/index.html Scaladoc] 6.0.4
* [http://scalaz.github.com/scalaz/scalaz-2.9.1-6.0.4/doc.sxr/index.html Annotated Sources] 6.0.4
* [http://scalaz.github.com/scalaz/scalaz-2.9.1-6.0.4/doc.sxr/scalaz/example/Example.scala.html Examples]
* [http://jenkins.scala-tools.org/view/scalaz/job/scalaz-seven/lastStableBuild/artifact/target/scala-2.9.1/unidoc/index.html#scalaz.package Scaladoc] 7.0-SNAPSHOT
* [http://pedrofurla.github.com/scalaz.html Pedro Furla's link collection]
==Features==
=== Scalaz and the Pimps ===
* object [http://scalaz.github.com/scalaz/scalaz-2.9.1-6.0.4/doc.sxr/scalaz/Scalaz.scala.html Scalaz] for single-import access to all functions and implicits provided by the library.
{{{
import scalaz._
import Scalaz._
// profit!
}}}
* The general purpose 'Pimps of Scalaz', that provide general purpose functions and allow object-oriented style syntax, for example `1.pure[List]` or `List(1, 2, 3).suml`
* [http://scalaz.github.com/scalaz/scalaz-2.9.1-6.0.4/doc.sxr/scalaz/Identity.scala.html Identity] wraps any value.
* [http://scalaz.github.com/scalaz/scalaz-2.9.1-6.0.4/doc.sxr/scalaz/MA.scala.html MA] wraps values based on a type constructor of kind `* -> *`, e.g `List[Int]`
* [http://scalaz.github.com/scalaz/scalaz-2.9.1-6.0.4/doc.sxr/scalaz/MAB.scala.html MAB] wraps values based on a type constructor of kind `(*, *) -> *`, e.g `Either[String, Int]`
* Specific pimps, to add useful methods to these data types:
* [http://scalaz.github.com/scalaz/scalaz-2.9.1-6.0.4/doc.sxr/scalaz/ArrayByte.scala.html Array[Byte]]
* [http://scalaz.github.com/scalaz/scalaz-2.9.1-6.0.4/doc.sxr/scalaz/BigIntegerW.scala.html BigInteger]
* [http://scalaz.github.com/scalaz/scalaz-2.9.1-6.0.4/doc.sxr/scalaz/BooleanW.scala.html Boolean]
* [http://scalaz.github.com/scalaz/scalaz-2.9.1-6.0.4/doc.sxr/scalaz/ByteW.scala.html Byte]
* [http://scalaz.github.com/scalaz/scalaz-2.9.1-6.0.4/doc.sxr/scalaz/CharW.scala.html Char]
* [http://scalaz.github.com/scalaz/scalaz-2.9.1-6.0.4/doc.sxr/scalaz/IntW.scala.html Int]
* [http://scalaz.github.com/scalaz/scalaz-2.9.1-6.0.4/doc.sxr/scalaz/IterableW.scala.html Iterable]
* [http://scalaz.github.com/scalaz/scalaz-2.9.1-6.0.4/doc.sxr/scalaz/ListW.scala.html List]
* [http://scalaz.github.com/scalaz/scalaz-2.9.1-6.0.4/doc.sxr/scalaz/LongW.scala.html Long]
* [http://scalaz.github.com/scalaz/scalaz-2.9.1-6.0.4/doc.sxr/scalaz/OptionW.scala.html Option]
* [http://scalaz.github.com/scalaz/scalaz-2.9.1-6.0.4/doc.sxr/scalaz/ShortW.scala.html Short]
* [http://scalaz.github.com/scalaz/scalaz-2.9.1-6.0.4/doc.sxr/scalaz/StreamW.scala.html Stream]
* [http://scalaz.github.com/scalaz/scalaz-2.9.1-6.0.4/doc.sxr/scalaz/StringW.scala.html String]
=== Type Classes ==
* An implementation of common type-classes
* [http://scalaz.github.com/scalaz/scalaz-2.9.1-6.0.4/doc.sxr/scalaz/Equal.scala.html Equal] - for doing type-safe (and configurable) equality checks
* [http://scalaz.github.com/scalaz/scalaz-2.9.1-6.0.4/doc.sxr/scalaz/Show.scala.html Show] - for type-safe configuration of display for types (like Java's `toString` but with a compile-time check for existence and easier to use)
* [http://scalaz.github.com/scalaz/scalaz-2.9.1-6.0.4/doc.sxr/scalaz/Order.scala.html Order] - type-safe comparisons for ordering
* [http://scalaz.github.com/scalaz/scalaz-2.9.1-6.0.4/doc.sxr/scalaz/Arrow.scala.html Arrow], a usable implementation of [http://www.cse.chalmers.se/~rjmh/afp-arrows.pdf John Hughes' arrows] for doing abstraction gymnastics with first-class functions. | [http://scalaz.github.com/scalaz/scalaz-2.9.1-6.0.4/doc.sxr/scalaz/example/ExampleArrow.scala.html Example]
* [http://scalaz.github.com/scalaz/scalaz-2.9.1-6.0.4/doc.sxr/scalaz/Applicative.scala.html Applicative], an implementation of Applicative Functors as per [http://www.soi.city.ac.uk/~ross/papers/Applicative.pdf Applicative Programming with Effects]. [http://scalaz.github.com/scalaz/scalaz-2.9.1-6.0.4/doc.sxr/scalaz/example/ExampleApplicative.scala.html Example]
* An implementation of a covariant binary functor ([http://scalaz.github.com/scalaz/scalaz-2.9.1-6.0.4/doc.sxr/scalaz/Bifunctor.scala.html Bifunctor]) for mapping over either (or both) side of a pair or `scala.Either`, `scala.Tuple2`, or similar. [http://scalaz.github.com/scalaz/scalaz-2.9.1-6.0.4/doc.sxr/scalaz/example/ExampleBifunctor.scala.html Example]
* An implementation of a contra-variant functor ([http://scalaz.github.com/scalaz/scalaz-2.9.1-6.0.4/doc.sxr/scalaz/Cofunctor.scala.html Cofunctor]) and [http://scalaz.github.com/scalaz/scalaz-2.9.1-6.0.4/doc.sxr/scalaz/Comonad.scala.html Comonad]. [http://scalaz.github.com/scalaz/scalaz-2.9.1-6.0.4/doc.sxr/scalaz/example/ExampleCofunctor.scala.html Cofunctor Example]
* [http://scalaz.github.com/scalaz/scalaz-2.9.1-6.0.4/doc.sxr/scalaz/Monad.scala.html Monad] and [http://scalaz.github.com/scalaz/scalaz-2.9.1-6.0.4/doc.sxr/scalaz/Functor.scala.html Functor] type classes with associated implementation and methods. [http://scalaz.github.com/scalaz/scalaz-2.9.1-6.0.4/doc.sxr/scalaz/example/ExampleMonad.scala.html Monad Example] | [http://scalaz.github.com/scalaz/scalaz-2.9.1-6.0.4/doc.sxr/scalaz/example/ExampleFunctor.scala.html Functor Example]
* [http://scalaz.github.com/scalaz/scalaz-2.9.1-6.0.4/doc.sxr/scalaz/Kleisli.scala.html Kleisli] and [http://scalaz.github.com/scalaz/scalaz-2.9.1-6.0.4/doc.sxr/scalaz/Cokleisli.scala.html Cokleisli] data types and subsequent useful operations. [http://scalaz.github.com/scalaz/scalaz-2.9.1-6.0.4/doc.sxr/scalaz/example/ExampleKleisli.scala.html Kleisli Example]
* A [http://scalaz.github.com/scalaz/scalaz-2.9.1-6.0.4/doc.sxr/scalaz/Monoid.scala.html Monoid] type class and (so many!) implementations
* [http://scalaz.github.com/scalaz/scalaz-2.9.1-6.0.4/doc.sxr/scalaz/Traverse.scala.html Traverse], an implementation of an _internal iterator_ as per [http://web.comlab.ox.ac.uk/oucl/work/jeremy.gibbons/publications/iterator.pdf The Essence of the Iterator Pattern] using a traversable type-class
* [http://scalaz.github.com/scalaz/scalaz-2.9.1-6.0.4/doc.sxr/scalaz/Memo.scala.html Memo] A memoisation library for automatically storing the result of computations (especially useful for Dynamic Programming Algorithms)
=== Data Structures ===
* [http://scalaz.github.com/scalaz/scalaz-2.9.1-6.0.4/doc.sxr/scalaz/NonEmptyList.scala.html NonEmptyList], a data type for representing one or more elements of the same type that guarantees successful termination of `head`, `tail` and other operations
* [http://scalaz.github.com/scalaz/scalaz-2.9.1-6.0.4/doc.sxr/scalaz/DList.scala.html DList], a data type for representing elements of the same type with constant time append/prepend operations.
* A multi-way [http://scalaz.github.com/scalaz/scalaz-2.9.1-6.0.4/doc.sxr/scalaz/Tree.scala.html Tree] (rose tree) and a one-hole zipper ([http://scalaz.github.com/scalaz/scalaz-2.9.1-6.0.4/doc.sxr/scalaz/TreeLoc.scala.html TreeLoc]) for tree traversal.
* [http://scalaz.github.com/scalaz/scalaz-2.9.1-6.0.4/doc.sxr/scalaz/Zipper.scala.html Zipper], a pointed list (zipper list) data type
* A data type ([http://scalaz.github.com/scalaz/scalaz-2.9.1-6.0.4/doc.sxr/scalaz/State.scala.html State]) for representing state transition through a value i.e. a function: `S => (S, A)` | [http://scalaz.github.com/scalaz/scalaz-2.9.1-6.0.4/doc.sxr/scalaz/example/ExampleState.scala.html Example]
* Finger Trees
* A Burkhard-Keller tree for fast approximation-based searches -- ever wondered why Google knows what you really meant, so quickly? [http://blog.notdot.net/2007/4/Damn-Cool-Algorithms-Part-1-BK-Trees Here is a great explanation of a B-K Tree] | [http://scalaz.github.com/scalaz/scalaz-2.9.1-6.0.4/doc.sxr/scalaz/BKTree.scala.html BKTree] | [http://scalaz.github.com/scalaz/scalaz-2.9.1-6.0.4/doc.sxr/scalaz/example/ExampleBKTree.scala.html Example]
* A [http://scalaz.github.com/scalaz/scalaz-2.9.1-6.0.4/doc.sxr/scalaz/Digit.scala.html Digit] data type (0-9)
=== Concurrency ===
* [http://scalaz.github.com/scalaz/scalaz-2.9.1-6.0.4/doc.sxr/scalaz/concurrent/Promise.scala.html Promise] and [http://scalaz.github.com/scalaz/scalaz-2.9.1-6.0.4/doc.sxr/scalaz/concurrent/Actor.scala.html Actor], a light-weight and highly configurable concurrency library with actors and non-blocking composable future values. [http://docs.google.com/present/view?id=ddmk3f43_63zpg3jcgz Presentation] | [http://scalaz.github.com/scalaz/scalaz-2.9.1-6.0.4/doc.sxr/scalaz/example/concurrent/Fibs.scala.html Example]
=== Integration ===
* [http://code.google.com/p/scalacheck/ ScalaCheck] Integration
* [http://scalaz.github.com/scalaz/scalaz-2.9.1-6.0.4/doc.sxr/scalaz/scalacheck/ScalaCheckBinding.scala.html ScalaCheckBinding] Type Class Instances for scalacheck.Gen and scalacheck.Arbitrary
* [http://scalaz.github.com/scalaz/scalaz-2.9.1-6.0.4/doc.sxr/scalaz/scalacheck/ScalazArbitrary.scala.html ScalazArbitrary] Arbitrary Instances for Scalaz data structures.
==Obtaining Scalaz==
Releases are also published to: http://scala-tools.org/repo-releases/org/scalaz. The `scalaz-full` module contains the full distribution (all modules, Scaladoc, and annotated sources)
Snapshots are periodically published to [http://scala-tools.org/repo-snapshots/org/scalaz/ Scala Tools]
===SBT ===
{{{
// Only needed to track snapshot releases, SBT automatically includes the releases repository.
resolvers += "Scala Tools Snapshots" at "http://scala-tools.org/repo-snapshots/"
libraryDependencies += "org.scalaz" %% "scalaz-core" % "6.0.4"
}}}
===Maven===
{{{
<repositories>
<repository>
<id>scala-tools-releases</id>
<name>Scala-Tools Maven2 Repository Releases</name>
<url>http://scala-tools.org/repo-releases</url>
</repository>
<repository>
<id>scala-tools-snapshots</id>
<name>Scala-Tools Maven2 Repository - Snapshots</name>
<url>http://scala-tools.org/repo-snapshots</url>
</repository>
</repositories>
<properties>
<scala.version>2.9.1</scala.version>
</properties>
<dependencies>
<dependency>
<groupId>org.scalaz</groupId>
<artifactId>scalaz-core_${scala.version}</artifactId>
<version>6.0.4</version>
</dependency>
</dependencies>
}}}
==Issues==
https://github.com/scalaz/scalaz/issues
==Hacking==
Source: http://github.com/scalaz/scalaz
Continuous Integration: http://hudson.scala-tools.org/view/scalaz/?
==Thanks==
Thanks to the Scala core team for the improvements in Scala 2.8.0 which have made Scalaz leaner and meaner. We're looking forward to further improvements in type inference, implicit resolution, and higher kinded types in future releases!
* Thanks [http://www.jetbrains.com/idea/ JetBrains] for helping us to bring our users the best library we can. JetBrains provides contributors to Scalaz with a licence to use Intellij IDEA for our open source production of Scalaz.
!YourKit is kindly supporting open source projects with its full-featured Java Profiler. !YourKit, LLC is the creator of innovative and intelligent tools for profiling Java and .NET applications. Take a look at !YourKit's leading software products:
* [http://www.yourkit.com/java/profiler/index.jsp YourKit Java Profiler]
* [http://www.yourkit.com/.net/profiler/index.jsp YourKit .NET Profiler]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment