Skip to content

Commit 0ab9cd9

Browse files
author
Steve Krouse
committed
started adding some realreflex frp types to essay
1 parent 533d10e commit 0ab9cd9

File tree

1 file changed

+40
-0
lines changed

1 file changed

+40
-0
lines changed

drafts/frp.md

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,46 @@ The Reflex library was built for Haskell web development via ghcjs. It features
6060
* compare ToDoMVC to Elm
6161
* what does foldDyn do and what's its type? Show how the stream is higher order.
6262

63+
```haskell
64+
todoMVC :: ( DomBuilder t m
65+
, DomBuilderSpace m ~ GhcjsDomSpace
66+
, MonadFix m
67+
, MonadHold t m
68+
, PostBuild t m
69+
)
70+
=> m ()
71+
todoMVC = do
72+
el "div" $ do
73+
elAttr "section" ("class" =: "todoapp") $ do
74+
mainHeader
75+
76+
foldDyn :: (a -> b -> b ) -> b -> Event a -> m (Dynamic b)
77+
tasks :: Dynamic (Map Int Task)
78+
rec tasks <- foldDyn (\transformation oldTasks -> transformation oldTasks) initialTasks listTransformationEvent
79+
80+
mergeWith :: (a -> a -> a) -> [Event a] -> Event a
81+
listTransformationEvent :: Event (Map Int Task -> Map Int Task)
82+
let listTransformationEvent = mergeWith (.) [
83+
insertNewEvent
84+
, listModifyTasks
85+
, clearCompletedEvent
86+
]
87+
88+
let insertNewEvent :: Event (Map Int Task -> Map Int Task)
89+
insertNewEvent = fmap insertNew_ newTask
90+
newTask <- taskEntry
91+
92+
listModifyTasks :: Event (Map Int Task -> Map Int Task)
93+
listModifyTasks <- taskList activeFilter tasks
94+
95+
(activeFilter, clearCompleted) <- controls tasks
96+
fmap :: (a -> b) -> Dynamic a -> Dynamic b
97+
let clearCompletedEvent :: Event (Map Int Task -> Map Int Task)
98+
clearCompletedEvent = fmap (\_ -> Map.filter $ not . taskCompleted) clearCompleted
99+
return ()
100+
infoFooter
101+
```
102+
63103
## 4. Is the cure worse than the disease?
64104

65105
* how the elm architecure is good

0 commit comments

Comments
 (0)