LINUX.ORG.RU

Нет, не правильно.

Сделать проще что? Написать неправильный код? Конечно, можно проще.

anonymous ()

Для таких вещей придумали аксессоры:

module Accessor where
import Data.Accessor

data D1 a = D1 { v :: a }
data D2 a = D2 { d1 :: D1 a }

d1Acc :: Accessor (D1 a) a
d1Acc = accessor v (\a d1 -> d1 {v = a})

d2Acc :: Accessor (D2 a) (D1 a)
d2Acc = accessor d1 (\d d2 -> d2 {d1 = d})

setV :: a -> D2 a -> D2 a
setV = setVal $ d2Acc .> d1Acc

Miguel ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.