41 lines
1.1 KiB
Haskell
41 lines
1.1 KiB
Haskell
{-# LANGUAGE OverloadedStrings #-}
|
|
module Elm.Internal.Documentation where
|
|
|
|
import Control.Applicative ((<$>),(<*>))
|
|
import Control.Monad
|
|
import Data.Aeson
|
|
|
|
data Document = Doc
|
|
{ moduleName :: String
|
|
, structure :: String
|
|
, entries :: [Entry]
|
|
} deriving (Show)
|
|
|
|
data Entry = Entry
|
|
{ name :: String
|
|
, comment :: String
|
|
, raw :: String
|
|
, assocPrec :: Maybe (String,Int)
|
|
} deriving (Show)
|
|
|
|
instance FromJSON Document where
|
|
parseJSON (Object v) =
|
|
Doc <$> v .: "name"
|
|
<*> v .: "document"
|
|
<*> (concat <$> sequence [ v .: "aliases", v .: "datatypes", v .: "values" ])
|
|
|
|
parseJSON _ = fail "Conversion to Document was expecting an object"
|
|
|
|
instance FromJSON Entry where
|
|
parseJSON (Object v) =
|
|
Entry <$> v .: "name"
|
|
<*> v .: "comment"
|
|
<*> v .: "raw"
|
|
<*> (liftM2 (,) <$> v .:? "associativity"
|
|
<*> v .:? "precedence")
|
|
|
|
parseJSON _ = fail "Conversion to Entry was expecting an object"
|
|
|
|
data Content = Markdown String | Value String
|
|
deriving Show
|
|
|