Skip to content

Instantly share code, notes, and snippets.

@khanage
Created October 11, 2017 05:17
Show Gist options
  • Save khanage/d98a1dbbdf787dc35123af60a578d9be to your computer and use it in GitHub Desktop.
Save khanage/d98a1dbbdf787dc35123af60a578d9be to your computer and use it in GitHub Desktop.
module Main where
import Data.Aeson
import Data.Aeson.Types
import Control.Applicative (Alternative(..))
data State = State { stateName :: String, stateNum :: Int } deriving (Eq, Show)
parseState :: Value -> Parser State
parseState = withObject "State" $ \v -> State <$> v .: "name" <*> v .: "id"
parseProvince :: Value -> Parser State
parseProvince = withObject "State" $ \v -> State <$> v .: "provinceName" <*> pure 20
instance FromJSON State where
parseJSON v =
parseState v <|> parseProvince v
main :: IO ()
main = do
let state = "{\"name\": \"WA\", \"id\": 1}"
province = "{\"provinceName\": \"NY\"}"
print (decode state :: Maybe State)
print (decode province :: Maybe State)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment