--- /dev/null
+module test
+
+import Data.Func
+import Data.Tuple
+import System.Time
+
+import iTasks
+import iTasks.Extensions.DateTime
+import iTasks.UI.Editor.Common
+
+Start w = doTasks gui5 w
+
+gui1 :: Int -> Task Int
+gui1 c = viewInformation "Counter" [] c
+ >>* [OnAction (Action "Count") (withValue (Just o gui1 o inc))]
+
+gui2 :: Task Real
+gui2 = withShared 42.0 \sh->
+ updateSharedInformation "Celcius" [] sh
+ -|| updateSharedInformation "Fahrenheit"
+ [UpdateAs (\c->1.8*c+32.0) \_ f->(f-32.0)/1.8] sh
+
+:: Flight
+ = OneWay Date
+ | Return (Date, Date)
+derive class iTask Flight
+
+gui3 :: Task Flight
+gui3 = get currentDate
+ >>- \now->editChoice () [] ["one-way flight", "return flight"] (Just "one-way flight")
+ >&> \sh-> whileUnchanged sh \v->case fromJust v of
+ "one-way flight" = withShared now \sh->
+ updateSharedInformation () [] sh
+ -|| updateSharedInformation () [UpdateUsing toString const (gEditor{|*|} <<@ enabledAttr False)] sh
+ >>* [OnAction (Action "Book") $ ifValue (\_->True) $ return o OneWay]
+ "return flight"
+ = updateInformation () [] now
+ -&&- updateInformation () [] now
+ >>* [OnAction (Action "Book") $ ifValue (uncurry (<)) $ return o Return]
+
+gui4 :: Timestamp Int -> Task Timestamp
+gui4 startTime duration = withShared duration \duration->
+ viewSharedInformation "Elapsed time: " [ViewUsing toProgress progressBar] (currentTimestamp >*< duration)
+ -&&- viewSharedInformation () [ViewAs \now->on (-) toInt now startTime] currentTimestamp
+ -&&- updateSharedInformation "Duration: " [UpdateUsing id (const id) $ slider <<@ minAttr 0 <<@ maxAttr 3600] duration
+ >>* [OnAction (Action "Reset") $ always $ get (currentTimestamp >*< duration) >>- uncurry gui4]
+where
+ toProgress (now, duration) =
+ (Just $ toInt $ on (-) (toReal o toInt) now startTime / toReal duration * 100.0, Nothing)
+
+gui5 = withShared [(0, "Emil", "Hans"), (1, "Mustermann", "Max"), (2, "Tisch", "Roman")] \data->
+ enterInformation "Filter prefix" []
+ >&> \v->whileUnchanged (mapRead (fromMaybe " ") v) \filter->
+ tune ArrangeHorizontal
+ $ enterChoiceWithShared () [ChooseFromList (\(_, f, l)->f +++ ", " +++ l)] data
+ >&> \v->whileUnchanged v \selection->case selection of
+ Nothing = viewInformation "Nothing selected" [] () @? const NoValue
+ Just x = updateInformation () [] x