>

Aeson-JSON 다음 데이터를 사용한 해킹 :

data Car = Car
  { carPosition  :: Position,
    carColor     :: Color,
    carDirection :: Direction }
  deriving (Show, Generic)

Car 에 대한 인스턴스를 생성했습니다 데이터 유형 Postion 에 대해 동일한 작업을 수행했습니다. Direction :

instance FromJSON Position
instance FromJSON Direction
instance FromJSON Car

그러나 이제 문제가 시작되면 ColorGloss 에서 제공합니다. 해킹과 그 가치는 예를 들어 빨간색 으로 작성되었습니다. Color  데이터 만 알고있다 : deriving Show deriving Generic 를 추가 할 가능성이 없습니다. . 다음 코드를 시도했습니다 :

instance FromJSON Color where
      parseJSON (Object v) = Color <$>
        v .: "carColor"

Picture -> Picture 유형과 일치하지 않는 것에 대해 불평합니다.  우리는 Color 와 같은 것을 기대했습니다. .

질문 : 데이터 Color 를 어떻게 사용할 수 있습니까?   Gloss 에서  

와 같은 JSON 객체를 읽는 방법

{ "carPostion": { "x": 0, "y": 10}, "carColor": "Red", "carDirection": "Up" }

carColor 없이 JSON 객체를 읽으려고했습니다.  (테스트 목적으로 만) 작동합니다.

업데이트 : 다음 질문처럼 보입니다 : Haskell Data.Decimal as Asonson 우리의 경우를 제외하고 우리는 Color 를 사용하고 싶습니다.   Data.Decimal 와 같이 주어진 곳에서  문제를 일으키는 사람입니다.

  • 답변 # 1

    기본 문자열을 구문 분석하는 것만으로도 간단합니다.

    instance FromJSON Color where
      parseJSON (String s) = maybe mzero return $ stringToColor s 
      parseJSON _ = mzero
    
    stringToColor :: String -> Maybe Color
    stringToColor s 
      | s == "red" = Just red
      | s == "blue" = Just blue 
      ... -- fill in all of your options from Gloss
      | otherwise = Nothing
    
    

    이것으로 간단한 문자열을 Color 중 하나로 바꿀 수 있습니다  사물. 일단 당신이 FromJSON 를 가지고   Color 에 대한 인스턴스 , 당신은 단지 instance FromJSON Car 를 사용할 수 있습니다 .

  • 이전 php - 페이지 매김이 사용자 지정 다시 쓰기 규칙과 작동하지 않습니다
  • 다음 html - 가운데 div를 여백으로 사용하고 div를 과도하게 사용