1

Int法線を使用してカウンター ステータスを維持するReactive Banana Wx のカウンターの例から始めます。

let networkDescription :: forall t. Frameworks t => Moment t () 
    networkDescription = do
    eup   <- event0 bup   command
    edown <- event0 bdown command

    let
        counter :: Behavior t Int
        counter = accumB 0 $ ((+1) <$ eup) `union` (subtract 1 <$ edown)

    sink output [text :== show <$> counter]

network <- compile networkDescription
actuate network

Intカウンターをより一般的なものに置き換えて更新するにはどうすればよいですかdata:

data Counter = Counter {
     count :: Int
 } deriving (Show)

let
    counter :: Behavior t Counter
    counter = accumB Counter { count = 0 } $ ??????

sink output [text :== show <$> count counter]

count次のような内部関数を参照する方法がわかりません。

count = count mycounter + 1

何か案が?

4

1 に答える 1

3

のタイプaccumBは次のとおりです。

accumB :: a -> Event t (a -> a) -> Behavior t a

したがって、それで を定義したい場合は、関数Behavior t Counterを運ぶイベントを使用する必要があります。Counter -> Counter

-- For the sake of convenience...
overCount :: (Int -> Int) -> Counter -> Counter
overCount f c = c { count = f (count c) }
counter = accumB Counter { count = 0 } $
    (overCount (+1) <$ eup) `union` (overCount (subtract 1) <$ edown) 
于 2015-09-13T17:37:50.873 に答える