1'$      !"# experimentalconal@conal.net=$%&'()*+,-./Sink of information 0Convenient shorthand Type specialization of 1 Type specialization of 2 3!Add post-processing. (Could use 4 instead, but 3 is more  specifically typed.) 5Add pre-processing. 6Add pre- and post processing 7Combine sinks 89:;<=>?@A&Run a visualization on a constructed (B-extracted) value. The F action is executed just once, after the visualization is all set up, 9 which allows for things like OpenGL shader compilation. CDEF GHEA clock that reports time in seconds and updates at the given period  (in seconds). A clock that updates every 1/ 60 second IJ.Rate slider. Convenience function built from  sliderRin and K. =Rate slider. Updates result (integral) 60 times per second.  Specialization of J. K>Integral of an input, with given update interval (in seconds) FIntegral of an input. Updates result (integral) 60 times per second. L >Render output, given a rendering action. Handles all set-up. C Intended as an implementation substrate for functional graphics. MAn empty texture. Test with  NIs a texture empty? OPQRTSTUVWXYZ[\]^_`abcdefghijklmnopqrstuv2w1xyz{|}~     experimentalconal@conal.net7Sink of information Convenient shorthand Type specialization of 1 Type specialization of 2 Combine sinks &Run a visualization on a constructed (B-extracted) value. The F action is executed just once, after the visualization is all set up, 9 which allows for things like OpenGL shader compilation. EA clock that reports time in seconds and updates at the given period  (in seconds). A clock that updates every 1/ 60 second .Rate slider. Convenience function built from  sliderRin and . =Rate slider. Updates result (integral) 60 times per second.  Specialization of . >Integral of an input, with given update interval (in seconds) FIntegral of an input. Updates result (integral) 60 times per second. >Render output, given a rendering action. Handles all set-up. C Intended as an implementation substrate for functional graphics. An empty texture. Test with ! !Is a texture empty? "#TSTUVWXYZ[\]^_`abcdefghijklmnopqrstuv2w1xyz{|}~ !"#" !# !"#           !" !#$%&'()*+,-./0123456789:;<=>?@ABCDEFG HI HJ HK HL HM HN HO HP QR QS QT QU VW VX VY VZ V[ V\ V] V^ V_ V` Va Vb Vc Vd Ve Vf Vg Vh Vi Vj Vk Vl Vm Vn !o !p !q !r st su sv wx wy wz w{ w| w} w~ w w w w w    *+,-.03489:;<=>?@ABCDEFG GtkTV-0.1.9Interface.TV.Gtk2Interface.TV.GtkRGTVOutIngtvrunGTVrunOutIOrunOut sliderRIn sliderIInclockIn rateSliderIn integralIn renderOut emptyTexturetextureIsEmpty fileNameIn textureInOrientVertical HorizontalMkO'MkOunMkOMkI'MkIunMkISinkActionTV-0.4.7Interface.TV.TangibletvrunTVresultbaseGHC.Basefmapargument~>>+>inMkIinMkI2inMkOinMkO2forget2gsetboxedhboxedrunMkOrunMkOIOghc-prim GHC.TypesIOboxNewboxerprimMkIprimMkO sliderGInclockDtItimerateSliderDtIn integralDtInmkCanvasflipYbogusTO loadTexture deleteTexture fileMungeInforgetInterface.TV.IOrunIOtoFilefromFilefileOut interactRS interactOutfileIn contentsInInterface.TV.Defaults defaultIn DefaultIn defaultOut DefaultOutInterface.TV.CommoninteractLineRSreadShow interactLineshowOutboolOut stringOutreadInboolInstringInputShowCgetReadFreadDgetBoolgetRead getString CommonInsputBoolputShow putString CommonOutsCInputCInputICOutputCTVunTvTVTVFunRunTVInterface.TV.OFunwrapOOXOFunInterface.TV.OutputoTitleoPairoLambdaoPrimasOPair asOLambdaoutputOPrimOLambdaOPairOTitleOutputInterface.TV.InputasIPairiTitleiPairiPriminputIPrimIPairITitleInput