Oto kod, który używany do pracy (odpowiednio obcięte mam nadzieję)Reaktywny banan 1.0.0 - Dlaczego ten stary kod się psuje?
makeNetworkDescription :: forall t . Frameworks t => Parameters -> Moment t()
makeNetworkDescription params = do
eInput <- fromAddHandler (input params)
eTick <- fromAddHandler (tick params)
..
let
bResourceMap :: Behavior t ResourceMap
bResourceMap = accumB initRmap $
adjustMarket <$>
bMarketRolls <@
eTick
Ale teraz typy uległy zmianie.
mamy:
makeNetworkDescription :: Parameters -> MomentIO()
i accumB :: MonadMoment m => a -> Event (a -> a) -> m (Behavior a)
powiedzieć zmienić definicję bResourceMap
do
bResourceMap :: Behavior ResourceMap
bResourceMap = accumB initRmap $
adjustMarket <$>
bMarketRolls <@
eTick
nieco off z definicji accumB
, ale zobaczymy co się stanie.
ghc
daje błąd
Couldn't match type ‘Behavior ResourceMap’ with ‘ResourceMap’
Expected type: Behavior ResourceMap
Actual type: Behavior (Behavior ResourceMap)
rację, bo od rodzaju accumB
zachowanie musi być w kontekście MonadMoment
. Zaglądając do MonadMoment
znajdę dwie instancje
instance MonadMoment Moment where liftMoment = id
instance MonadMoment MomentIO where liftMoment = MIO . unM
Więc dlaczego rzeczywistego typu postanowienie Behavior (Behavior ResourceMap)
, typ zewnętrzna musi być MonadMoment
, który nie pasuje.
Proszę o poradę, jak rozwiązać ten problem, dzieje się tak z wszystkimi moimi definicjami Behavior
.
Po prostu ciekawy: czy to projekt prawdziwy czy hobby? –
To jest prawdziwa, ale nie gra qua. Ta gra służy celowi innym niż byciu tylko grą. –