From f920475bf8739ad9bb9dbe6c9c62f0a7ccfe1ce3 Mon Sep 17 00:00:00 2001 From: Steffen Michels Date: Mon, 21 Oct 2019 12:18:29 +0200 Subject: [PATCH] dynamic editors: fix decoding of lists --- .../iTasks/Extensions/Editors/DynamicEditor.icl | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/Libraries/iTasks/Extensions/Editors/DynamicEditor.icl b/Libraries/iTasks/Extensions/Editors/DynamicEditor.icl index 994728445..146528a0e 100644 --- a/Libraries/iTasks/Extensions/Editors/DynamicEditor.icl +++ b/Libraries/iTasks/Extensions/Editors/DynamicEditor.icl @@ -586,8 +586,18 @@ where fromJSON` _ json = fromMaybe (abort "corrupt dynamic editor value") $ fromJSON json valueCorrespondingToList :: !Dynamic ![(DynamicConsId, DEVal)] -> Dynamic - valueCorrespondingToList ((f, g) :: (a -> b, [b] -> c)) args = - dynamic (g $ fromDynList (dynamic f) [valueCorrespondingTo` val \\ val <- args]) + valueCorrespondingToList funcs args = + case [valueCorrespondingTo` val \\ val <- args] of + [] = + case funcs of + ((_, g) :: (a -> b, [b] -> c)) = dynamic g [] + _ = abort "corrupt dynamic editor valueU" + // we have to use the first element to update the type, + // the `b` and `c` type variable is required to be equal for all list elements + args=:[fst: _] = + case (funcs, fst) of + ((f, g) :: (a -> b, [b] -> c), _ :: a) = dynamic (g $ fromDynList (dynamic f) args) + _ = abort "corrupt dynamic editor value" valueCorrespondingToList _ _ = abort "corrupt dynamic editor value" fromDynList :: !Dynamic ![Dynamic] -> [b] | TC b -- GitLab