I have one more question.
Also i need to zipApp list to part of Line: either to only first list
("ordered" elements) or to only second ("other" elements). I have implemented
this using Monoid:
import Data.Monoid
instance Monoid (Line a) where
mempty = Line [] []
(Line xs ys) `mappend` (Line xs' ys')
= Line (xs `mappend` xs') (ys `mappend` ys')
onlyOrdered :: Line a -> Line a
onlyOrdered (Line xs ys) = Line xs []
onlyOthers :: Line a -> Line a
onlyOthers (Line xs ys) = Line [] ys
and function looks like
inlineToOrdered :: (a -> a) -> Line a -> Line a
inlineToOrdered g = mappend
<$> zipApp (id : repeat g) . onlyOrdered
<*> onlyOthers
It works as well, but is this solution good? Or there is some better way to
limit "scope" of function application to only part of datatype?