go :: Text -> Int64 -> Text -> Handler Text
go loc areaId urlHash = do
    area <- lookAtArea areaId
    case area of
        Just area' -> do
            let newAreaId = case loc of
                    "north" -> areaGo_north area'
                    "east"  -> areaGo_east area'
                    "west"  -> areaGo_west area'
                    "south" -> areaGo_south area'
                    _       -> Nothing
            case newAreaId of
                Just newAreaId' -> do
                    _ <- updateArea (fromIntegral newAreaId') urlHash
                    areaDescription <- lookAround (fromIntegral newAreaId') urlHash
                    return $ "You went " ++ loc ++ ". " ++ areaDescription
                Nothing -> return "You cannot go there."
        Nothing -> return "Invalid location."
go :: Text -> Int64 -> Text -> Handler Text
go loc areaId urlHash = do
    area <- lookAtArea areaId
    case area of
        Just area' -> do
            let newAreaId = case loc of
                    "north" -> areaGo_north area'
                    "east"  -> areaGo_east area'
                    "west"  -> areaGo_west area'
                    "south" -> areaGo_south area'
                    _       -> Nothing
            case newAreaId of
                Just newAreaId' -> do
                    _ <- updateArea (fromIntegral newAreaId') urlHash
                    areaDescription <- lookAround (fromIntegral newAreaId') urlHash
                    return $ "You went " ++ loc ++ ". " ++ areaDescription
                Nothing -> return "You cannot go there."
        Nothing -> return "Invalid location."
go loc areaId urlHash = do
    area <- lookAtArea areaId
    case area of
        Just area' -> do
            let newAreaId = case loc of
                    "north" -> areaGo_north area'
                    "east"  -> areaGo_east area'
                    "west"  -> areaGo_west area'
                    "south" -> areaGo_south area'
                    _       -> Nothing
            case newAreaId of
                Just newAreaId' -> do
                    _ <- updateArea (fromIntegral newAreaId') urlHash
                    areaDescription <- lookAround (fromIntegral newAreaId') urlHash
                    return $ "You went " ++ loc ++ ". " ++ areaDescription
                Nothing -> return "You cannot go there."
        Nothing -> return "Invalid location."