Skip to content

Instantly share code, notes, and snippets.

@pikajude
Created October 2, 2019 17:17
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save pikajude/73e37308ff357d63de2f47eacf867972 to your computer and use it in GitHub Desktop.
Save pikajude/73e37308ff357d63de2f47eacf867972 to your computer and use it in GitHub Desktop.
{-# LANGUAGE DisambiguateRecordFields #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE NoMonomorphismRestriction #-}
{-# LANGUAGE OverloadedLists #-}
{-# LANGUAGE RecursiveDo #-}
{-# LANGUAGE TypeFamilies #-}
module Main where
import Reflex.Dom
import Data.Text ( pack )
import Data.Fixed
default ()
main :: IO ()
main = mainWidget $ mdo
t <- tickLossyFromPostBuildTime (recip 20)
cows <- foldDyn (+) (0 :: Integer) (1 <$ buyCow)
milkGen <- performEvent
(ffor t $ \_ -> do
cowCount <- sample (current cows)
return $ recip 20 * fromIntegral cowCount
)
milk <- foldDyn (+) (0 :: Milli) milkGen
buyCow0 <- dyn $ ffor2 cows milk $ \cowNumber mNumber -> el "p" $ do
text
$ pack
$ show cowNumber
++ " cows owned, produced "
++ show mNumber
++ "L of milk"
button "Buy another cow"
buyCow <- switchHold never buyCow0
el "p" $ do
text "Milk: "
display milk
return ()
@danbornside
Copy link

main = mainWidget $ mdo
  t       <- tickLossyFromPostBuildTime (recip 20)
  cows    <- foldDyn (+) (0 :: Integer) (1 <$ buyCow)

  milkGen <- performEvent
    (ffor t $ \_ -> do
      cowCount <- sample (current cows)
      return $ recip 20 * fromIntegral cowCount
    )
  milk    <- foldDyn (+) (0 :: Milli) milkGen

  buyCow <- el "p" $ do
    dynText
      $  (T.pack .  show <$> cows)
      <> " cows owned, produced "
      <> (T.pack . show <$> milk)
      <> "L of milk"
    button "Buy another cow"

  el "p" $ do
    text "Milk: "
    display milk
  return () ```

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment