[Haskell-cafe] Request for Comments - hscurrency 0.0.1
mutjida at gmail.com
Sun Aug 16 21:08:37 EDT 2009
To let the type checker do some work for you, without getting all the
way into the territory of the dimensional package, you can use
newtypes and a Units class with methods for wrapping and unwrapping
Doubles; we use this approach at work and find it strikes a nice
balance between useful (static typechecking) and usable (unobtrusive
to introduce to existing codebase). Just as in your code, conversions
are written explicitly by us and can change when needed (with a
recompile), or can require an IO action to make use of changing data.
On Sun, Aug 16, 2009 at 9:55 AM, Max Cantor<mxcantor at gmail.com> wrote:
> @Jason I'm not sure what you mean about exposing the type information.
> Unless you mean that each currency would be a separate type somehow. While
> this is a similar problem to the dimensional issue, the problem is that the
> FX rates are changing all the time. While the conversion between a meter
> and a foot is always constant, with FX rates thats not the case. So 2ft +
> 3m is always a well defined value but something like USD 1 + JPY 1 gives a
> function of the USDJPY exchange rate, not a constant value.
> @ Antoine I'll add some comments. you're right that doubles are not
> typically used nor would they be in a finished product. for the time being,
> however, I dont know if its better to use Ratio's, Fixed's or what, so just
> settled on the most straightforward for now.
> On Aug 16, 2009, at 1:26 AM, Jason Dagit wrote:
>> On Sat, Aug 15, 2009 at 5:15 AM, Max Cantor <mxcantor at gmail.com> wrote:
>> Hi all,
>> I'm putting together some simple tools to do safe calculations on
>> different currencies. For instance, making sure that you dont add something
>> like 5 USD + 10 JPY without doing a proper conversion.
>> I've put up some code on google code which probably explains what I'm
>> trying to do more succinctly than this email. I'm curious what poeple think
>> about the library, its the first haskell code I've written for the purpose
>> of sharing and I intend to add it to hackage once I finalize the interface a
>> bit more.
>> The code is at: http://bit.ly/1Cjjlj
>> I'm very open to suggestions on improving the interface. RIght now its
>> very simple and straightforward but potentially limited.
>> Right now it looks like you have taken the approach of embedded domain
>> specific language. You have not exposed the currency units to the type
>> system. Therefore you rely on the rules of your embedded language to do
>> proper conversions.
>> Have you considered exposing the type information to the type checker? A
>> similar question came up recently on a Portland functional programming
>> mailing list and my reply can be found here:
>> The experimental code which resulted is here:
>> You may also want to look at the dimensional package:
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
More information about the Haskell-Cafe