
On Tue, Oct 31, 2006 at 03:12:53PM +0200, Yitzchak Gale wrote:
But I would rather not be forced to write things like
replace (I 0 $ I 2 $ I 3 $ ())
in my code. My first attempt was very similar to yours, except I used
replace (0, (2, (3, ())))
instead of your Index type.
I started with it too, but I had to disambiguate the numeric type, eg. by saying: (0 :: Int, (2 :: Int, (3 :: Int, ()))). Hmmm... I could solve it without creating a new type.
I don't like my solution, either.
So I guess I would define a full solution as something nice enough to be used in practice. Let's be more concrete - it has to be nice enough that most people who need, say, replace2 or replace3, in real life, would actually use your function instead of writing it out by hand.
I think that in pracice I would still prefer the version with indices gathered in a single argument - it is a bit more uniform, more first-class, etc. Hmmm... Haskell's Arrays are a good example.
Maybe others would disagree, but so far, I personally do not use either your solution or my solution. I write it out by hand.
Well, I didn't yet have a need for such a function...
If you insist that each index should be given as a separate function argument, it may be possible to achieve it using the tricks that allow to write the variadic composition operator.
I am not familiar with that. Do you have a reference?
I think it's in one of Oleg's articles mentioned in other replies.
Is that the best way to do it? (Is that a way to do it at all?)
I am not sure. Best regards Tomasz