- disentangling Holo speccing from queryHoloItem invocations, finally
- complicated by mkTextEntryD using an emptyVisualHolo, which translated to ~emptyBlankHolo
- emptyBlankHolo has no dimensions, so when run through render pipeline it
needs a zero-sized Drawable
- UnDrawable was thus born, as an ADT case
- the entire draw thing now needs to be aware of it
- Switch to maybe/employ functoriality?
- the entire draw thing now needs to be aware of it
- UnDrawable was thus born, as an ADT case
- emptyBlankHolo has no dimensions, so when run through render pipeline it
needs a zero-sized Drawable
- complicated by mkTextEntryD using an emptyVisualHolo, which translated to ~emptyBlankHolo
- trying to get a picture of how to route events
- talked to dalaing on #reflex-frp
- talking to dalaing and alanCS helped me find light on #reflex-frp
- we can distribute the dumb EventSelector object everywhere, freely, and project it
- next question is about GLFW event masks – a far simpler issue
- done a basic algebra for event masks,
- subscriptions introduced as concept – updated leaf ctors to pass them around
- TODO for combinators to properly handle those
- done event masks in
reflex-glfw - completed picking-based dynamic focus that properly responds to scene changes!
- Port now a Dynamic
- framebuffer size changes driving Port
- picking pipeline re-generation driven by Port changes
- started rewriting MRecord to accomodate generic FRP widged derivation
- faced complexity of the holo/dynamic API
- started simplifying it, and mostly succeeded for simple cases
- complex cases are, well, involved: mkTextEntryD & mkTextEntryValidateD
- complicated because of Style interactivity knot tying
- simple cases have their default style baked in
- we still have the old problem of style Behavior taking effect on next redraw
- complicated because of Style interactivity knot tying
- maybe there is still some generality to lift there
- complex cases are, well, involved: mkTextEntryD & mkTextEntryValidateD
- we don’t want to create a dynamic from a dynamic – rather one from a value, since our task is to lift a non-interactive value.
- ..and the above wish was granted, liftDyn is now a Holo class method
- so, ‘readField’ needs to be monadic, at least because of MonadHold, and therefore ‘hsequence’ and =<< in ‘recover’
- cue much suffering and fun from hitting dead ends & trying to upgrade to GHC 8.6.1, that turned into an attempt to build GHC to improve its logging, to track down a compiler panic..
- we need readField to transform the type – from structural to derived
- the argument-side type-level lists are over the structural type
- the return-side type needs to reflect the change of type from structural to derived
- (NP m xs) is current, but doesn’t reflect that change
- it’s still useful to be able to refer to the structural type
- if we want to keep the unmodified NP to work for us, we need to change its first argument to include the aforementioned change of type
- (NP m xs) is current, but doesn’t reflect that change
- the Prod m Derived needs expression to unify with regards to t, that is baked into m
- ergo we have m ~ ReflexGLFW t mb at the top level, to make t available for unification
- ..which makes GHC complain: Could not deduce: Ref mb ~ GHC.IORef.IORef
- ..and we have to placate it with: ReflexGLFWCtx t mb
- and that works
- but it’s unwieldy, and so ReflexGLFWCtx t m mb
- ..and we have to placate it with: ReflexGLFWCtx t mb
- ..which makes GHC complain: Could not deduce: Ref mb ~ GHC.IORef.IORef
- ergo we have m ~ ReflexGLFW t mb at the top level, to make t available for unification
- so, the question seems to be – how do we manage to switch from the record’s ConsCtx to the field’s Record so smoothly.. ?
- [ ] simplify the holo/dynamic construction model
- [ ] generics-sop to construct an interactive FRP widget for a value