[Haskell-cafe] Value classes

Henning Thielemann schlepptop at henning-thielemann.de
Wed Jan 6 19:43:22 EST 2010


Mads Lindstrøm schrieb:
> Hi
>
> A function inc5
>
>   inc5 :: Float -> Float
>   inc5 x = x + 5
>
> can only be a member of a type class A, if we make all functions from
> Float -> Float members of type class A. Thus, I assume, that _type_
> class is named type class, as membership is decided by types.
>
> However, it makes no sense to say that all functions from Float -> Float
> are invertible or continuous. We would want to specifically say that
> inc5 is continuous, not all Float -> Float functions. Thus, we could
> have another abstraction, lets call it _value_ class, where we could say
> that an individual value (function) could be member. We could say
> something like:
>
>   class Invertible (f :: a -> a) where
>     invert :: f -> (a -> a)
>
>   instance Invertible inc5 where
>     invert _ = \x -> x - 5
>
> In many cases this would be too specific. We would like to say, that
> applying the first argument to `+` returns an invertible function.
> Something like:
>
>   instance Invertible (`+` x) where
>     invert (x +) = \y -> y - x
>
> We would properly also like to say, that composing two invertible
> functions results in another invertible function. I guess there are many
> more examples.
>   
Maybe you could define types like

newtype InvertibleFunction a b = InvertibleFunction (a -> b)
newtype ContinuousFunction a b = ContinuousFunction (a -> b)
or
newtype AttributedFunction attr a b = AttributedFunction a b
where attr can be Invertible, Continuous, or (Invertible, Continuous).
Then you may define a type class that provides a functional inverse, if 
attr shows invertibility.




More information about the Haskell-Cafe mailing list