문제를 함께 두는 것은 내가 더 많은 코드를 입력 Behavior t GameState
기능 바나나 여행자 - 행동 t의 GameState
의 동작을 만드는 방법을 모르겠지만, 그냥 이야기를이 켜지지 생각 무엇을 보여주기 위해 노력하고 있다는 것입니다 문제에 대해. 기입 할 공백이 있으면 알려주세요 여기에 내가 가지고있는 작업은 다음과 같습니다.
data GameState = GameState {agent :: Agent
,universe :: Universe
}
type Universe = Gr Planet()
data Command = Move PlanetName
| Look
| Quit
deriving Show
data PlayerCommand = PlayerCommand Command PID
| Null
deriving Show
updateGS :: PlayerCommand -> GameState -> GameState
updateGS (PlayerCommand (Move planet) pid) gs =
let agent = getAgent pid gs
nodes = labNodes $ universe gs
current = location agent
Just fromP = lookup (fromEnum current) nodes
Just toP = lookup (fromEnum planet) nodes
fromNode = fromEnum current
toNode = fromEnum planet
uPlayer = Player pid (getPlanetName toP) (Location planet)
mData = MoveData uPlayer (toNode,toP) (fromNode,fromP) nodes
uPlanets = updateLNodeList mData
in GameState uPlayer (mkGraph uPlanets $ labUEdges gates
initialGS :: GameState
initialGS = GameState initPlayer (makeUniverse makePlanetNodes)
및 이벤트 네트워크
makeNetworkDescription :: AddHandler PlayerCommand -> IO EventNetwork
makeNetworkDescription addCommandEvent = compile $ do
eInput <- fromAddHandler addCommandEvent
let bCommand = stepper Null eInput
eCommandChanged <- changes bCommand
let bGameState :: Behavior t GameState
bGameState = stepper initialGS
reactimate $ (\n -> appendFile "output.txt" ("Command is " ++ show n)) <$> eCommandChanged
내가 bGameState이 eCommandChange를 사용할 필요가 생각하지만, 나는이 문제에로 실행 이 날 리드
stepper :: a -> Event t a -> Behavior t a
유형은 내가 사용할 수있는 eGameState :: Event t GameState
으로 eInput :: Event t PlayerCommand
을 변환 할 필요가 생각하는 stepper
을 작성하여 Behavior t GameState
내 궁금증은 맞습니까? 그렇지 않다면, 나는 다시 감독 될 수 있을까? 그렇다면 eGameState :: Event t GameState
은 어떤 모습일까요?
아래의 응답에 대한 응답으로. 처음에 accumB
을 고려했을 때 유형 생성 오류가 발생했습니다. 나는 당신의 제안을 시도했을 때 어떤 일이 일어 났는가.
let bGameState :: Behavior t GameState
bGameState = accumB initialGS $ updateGS <$ eInput
오류
Couldn't match expected type `GameState'
with actual type `PlayerCommand'
Expected type: GameState -> GameState
Actual type: PlayerCommand -> GameState -> GameState
In the first argument of `(<$)', namely `updateGS'
In the second argument of `($)', namely `updateGS <$ eInput'
그것에 대해 무엇을 할 확실하지 않음 산출한다. 저는 여러분의 모범을보고 대답이 명확 해지는 지 살펴 보겠습니다. 밖으로 향한 주셔서 감사합니다 stepper
stepper
더 많이 나는 제안 된 코드를 공부할수록 더 많은 종류의 오류에 당황 스럽다.
나는 (<$)' to '(<$>)을 변경했지만 승인을 받아야합니다. –
감사합니다. 편집에 대한 메시지를받지 못했지만 방금 직접 변경했습니다. –