[Haskell-cafe] partially applied data constructor and corresponding type
TP
paratribulations at free.fr
Sat Apr 27 23:35:44 CEST 2013
Thanks Yury,
The problem with this solution is that if I have written a method for the
Tensor type (for example a method of a typeclass of which Tensor is an
instance) that uses the order of the tensor (your "ndims") in a general way, I
cannot reuse it easily for a vector defined like that.
In fact, my problem is to be able to define:
* from my type "Tensor", a type "Vector", by specifying that the dimension
must be one to have a "Vector" type.
* from my constructor "TensorVar", a constructor "VectorVar", which
corresponds to TensorVar with the integer equal to 1.
The idea is to avoid duplicating code, by reusing the tensor type and data
constructor. At some place in my code, in some definition (say, of a vector
product), I want vectors and not more general tensors.
TP
On Saturday, April 27, 2013 16:16:49 Yury Sulsky wrote:
Hi TP,
Are you looking to use a phantom types here? Here's an example:
data One
data Two
data Tensor ndims a = Tensor { dims :: [Int], items :: [a] }
type Vector = Tensor One
type Matrix = Tensor Two
etc.
On Sat, Apr 27, 2013 at 3:33 PM, TP <paratribulations at free.fr> wrote:
Hello,
I ask myself if there is a way to do the following.
Imagine that I have a dummy type:
data Tensor = TensorVar Int String
where the integer is the order, and the string is the name of the tensor.
I would like to make with the constructor TensorVar a type "Vector", such
that, in "pseudo-language":
data Vector = TensorVar 1 String
Because a vector is a tensor of order 1.
Is this possible? I have tried type synonyms and newtypes without any success.
Thanks a lot,
TP
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/haskell-cafe/attachments/20130427/68a42333/attachment.htm>
More information about the Haskell-Cafe
mailing list