Open Quark (CAL language) available under BSD-style license

Business Objects' Quark Framework for Java, which includes a Haskell-like language CAL has recently been released as open source under a BSD style license. Details and downloads are available on the Main Business Objects Labs Page for CAL. The framework, with or without sources, can be downloaded without any kind of registration.

For those who did not see last year's announcements and the seeding of the framework (without sources), there are a number of documents available that should help with understanding the nature of the CAL language, the SDK and tools.

Naturally, we hope that people will provide feedback and contribute in other ways, and we have a discussion forum available for this purpose - see link on the main page.

We continue to be very active on this project, with a current focus on improving the Eclipse integration as well as continued evolution of the language.

Luke Evans
Chief Scientist, VP Research, Business Objects

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.

monadic operations?

I just quickly read through the CAL user guide. As far as I can tell, there was no mention of operations such as reading/writing files, sockets, etc. In other words, the monadic part of Haskell. Did I miss something?

Also, are you planning on providinga library for GUI/graphics?

It also seems like CAL and Java are not intended to be integrated very well (except through foreign function calls/unsafe data types). Is one of the goals of the project to make CAL and Java interoperate as well as F# and C#?

I have to say that I love the fact that you have sensible function names. Other haskeller wanna-bes should check it out.

I also look forward to checking out your Eclipse integration.
(were those GADTs I saw in CAL??)

Re: monadic operations? etc.

You may be interested in reading through our short document entitled "CAL for Haskell Programmers" (available on the main web page) as there is some discussion about the philosophy of CAL in relation to purity (p.2). In summary, we have favoured encapsulating impure functions inside 'pure' ones that are public/consumable. While this pattern/philosophy has been uniformly applied in the CAL libraries, it is still possible to express the Monad type class (see p.8 of the CAL for Haskell Programmers doc).

The libraries delivered in the Open Quark 1.3.0 release include a Cal.IO.File library. However, up to now, the emphasis in the Quark Framework has been to allow the creation of reusable business logic within a regular Java application. Ergo, we have not focused on providing CAL libraries to do basic IO, comms etc. and favoured calling regular Java libraries for such things, or simply having all such activities localised in the regular Java code. Clearly, CAL libraries to directly access such facilities are possible.

Likewise, there are no GUI libraries per se, though we have created examples that can output by plotting points, lines and glyphs to a window (see this).

To your point on CAL-Java integration, it depends on what you mean exactly. Certainly, we cannot yet embed CAL directly within Java source (like LINQ in C#). That would indeed be an interesting feature for the future. However, much of the point of CAL is exactly tight Java integration. We have gone to great lengths to make sure that you can easily call between CAL and Java sourced code, and that the mechanisms for moving and sharing data are efficient. The "foreign function interface" is quite advanced and truly integrates Java/CAL, with the compiler employing many tricks at the interface. CAL has a pretty innovative mechanism for having values appear naturally on both sides of the interface: see "input and output policies" in the docs. You might find the document entitled "Java meets Quark" interesting, as this deals with a number of practical instances of integration.