[Haskell-cafe] Copying a syntax tree

Sergey Mironov ierton at gmail.com
Tue Oct 2 12:33:41 CEST 2012


Yes, thats good solution. Let me complicate things a bit. Lets define
last data, D, in a different way:

> data A a = A Int Int (B a)
> data B a = B String String (C a)
> data C a = C Int Int (D a)
>
> data D a = D Int (F a)

where F is a type function

> type family F t
> data Stage1
> data Stage2
> type instance F Stage1 = Int
> type instance F Stage2 = String

This time D is not a functor, because 'a' can accept only either
Stage1 or Stage2. And what I need is to quickly define copy :: A
Stage1 -> A Stage2

is it possible without writing boilerplate?

2012/10/2 Erik Hesselink <hesselink at gmail.com>:
> You could add {-# LANGUAGE DeriveFunctor #-}, and then add 'deriving
> Functor' to all your data types (or you could of course manually
> define your functor instances). Then what you want is just 'fmap
> show'.
>
> Erik
>
> On Tue, Oct 2, 2012 at 9:55 AM, Sergey Mironov <ierton at gmail.com> wrote:
>> Hi! I have a syntax tree defined like this:
>>
>>>
>>> data A a = A Int Int (B a)
>>>
>>> data B a = B String String (C a)
>>>
>>> data C a = C Int Int (D a)
>>>
>>
>> and so on, all the data are parametrized with a type variable. This variable
>> is actually used as a field in the very end of a hierarchy:
>>
>>>
>>> data D a = D Int a
>>>
>>
>> Now I have to write a function which would copy (A Int) to (A String). Is it
>> possible to do so using TH/syb without writing
>>
>> copyA (A i1 i2 b) = A i1 i2 (copyB b)
>> copyB = ...
>> copyC = ...
>> ..
>> copyD (D i a) = D i (show a)
>> ?
>>
>> Could you provide me with a hint?
>>
>> Thanks,
>> Sergey
>>
>> _______________________________________________
>> Haskell-Cafe mailing list
>> Haskell-Cafe at haskell.org
>> http://www.haskell.org/mailman/listinfo/haskell-cafe



More information about the Haskell-Cafe mailing list