parent
fcca883e00
commit
1f40b633d6
|
@ -1,7 +1,6 @@
|
||||||
{-# LANGUAGE DeriveDataTypeable #-}
|
{-# LANGUAGE OverloadedLists #-}
|
||||||
{-# LANGUAGE OverloadedLists #-}
|
{-# LANGUAGE OverloadedStrings #-}
|
||||||
{-# LANGUAGE OverloadedStrings #-}
|
{-# LANGUAGE RecordWildCards #-}
|
||||||
{-# LANGUAGE RecordWildCards #-}
|
|
||||||
|
|
||||||
{-| This library only exports a single `dhallToJSON` function for translating a
|
{-| This library only exports a single `dhallToJSON` function for translating a
|
||||||
Dhall syntax tree to a JSON syntax tree (i.e. a `Value`) for the @aeson@
|
Dhall syntax tree to a JSON syntax tree (i.e. a `Value`) for the @aeson@
|
||||||
|
@ -178,7 +177,6 @@ import Control.Exception (Exception, throwIO)
|
||||||
import Data.Aeson (Value(..), ToJSON(..))
|
import Data.Aeson (Value(..), ToJSON(..))
|
||||||
import Data.Monoid ((<>), mempty)
|
import Data.Monoid ((<>), mempty)
|
||||||
import Data.Text (Text)
|
import Data.Text (Text)
|
||||||
import Data.Typeable (Typeable)
|
|
||||||
import Dhall.Core (Expr)
|
import Dhall.Core (Expr)
|
||||||
import Dhall.TypeCheck (X)
|
import Dhall.TypeCheck (X)
|
||||||
import Dhall.Map (Map)
|
import Dhall.Map (Map)
|
||||||
|
@ -202,19 +200,43 @@ import qualified Options.Applicative
|
||||||
Because the majority of Dhall language features do not translate to JSON
|
Because the majority of Dhall language features do not translate to JSON
|
||||||
this just returns the expression that failed
|
this just returns the expression that failed
|
||||||
-}
|
-}
|
||||||
data CompileError = Unsupported (Expr X X) deriving (Typeable)
|
data CompileError
|
||||||
|
= Unsupported (Expr X X)
|
||||||
|
| BareNone
|
||||||
|
|
||||||
instance Show CompileError where
|
instance Show CompileError where
|
||||||
|
show BareNone =
|
||||||
|
Data.Text.unpack $
|
||||||
|
_ERROR <> ": A bare ❰None❱ is not valid \n\
|
||||||
|
\ \n\
|
||||||
|
\Explanation: The conversion to JSON/YAML does not accept ❰None❱ in isolation as \n\
|
||||||
|
\a valid way to represent ❰null❱. In Dhall, ❰None❱ is a function whose input is \n\
|
||||||
|
\a type and whose output is an absent value of that type. \n\
|
||||||
|
\ \n\
|
||||||
|
\For example: \n\
|
||||||
|
\ \n\
|
||||||
|
\ \n\
|
||||||
|
\ ┌─────────────────────────────────┐ This is a function whose result is an \n\
|
||||||
|
\ │ None : ∀(a : Type) → Optional a │ ❰Optional❱ value, but the function \n\
|
||||||
|
\ └─────────────────────────────────┘ itself is not a valid ❰Optional❱ value \n\
|
||||||
|
\ \n\
|
||||||
|
\ \n\
|
||||||
|
\ ┌─────────────────────────────────┐ \n\
|
||||||
|
\ │ None Natural : Optional Natural │ This is a valid ❰Optional❱ value (an \n\
|
||||||
|
\ └─────────────────────────────────┘ absent ❰Natural❱ number in this case) \n\
|
||||||
|
\ \n\
|
||||||
|
\ \n\
|
||||||
|
\The conversion to JSON/YAML only translates the latter form to ❰null❱. "
|
||||||
show (Unsupported e) =
|
show (Unsupported e) =
|
||||||
Data.Text.unpack $
|
Data.Text.unpack $
|
||||||
"" <> _ERROR <> ": Cannot translate to JSON \n\
|
_ERROR <> ": Cannot translate to JSON \n\
|
||||||
\ \n\
|
\ \n\
|
||||||
\Explanation: Only primitive values, records, unions, ❰List❱s, and ❰Optional❱ \n\
|
\Explanation: Only primitive values, records, unions, ❰List❱s, and ❰Optional❱ \n\
|
||||||
\values can be translated from Dhall to JSON \n\
|
\values can be translated from Dhall to JSON \n\
|
||||||
\ \n\
|
\ \n\
|
||||||
\The following Dhall expression could not be translated to JSON: \n\
|
\The following Dhall expression could not be translated to JSON: \n\
|
||||||
\ \n\
|
\ \n\
|
||||||
\↳ " <> txt <> " "
|
\↳ " <> txt <> " "
|
||||||
where
|
where
|
||||||
txt = Dhall.Core.pretty e
|
txt = Dhall.Core.pretty e
|
||||||
|
|
||||||
|
@ -257,6 +279,11 @@ dhallToJSON e0 = loop (Dhall.Core.normalize e0)
|
||||||
return (toJSON a')
|
return (toJSON a')
|
||||||
Dhall.Core.App Dhall.Core.None _ -> do
|
Dhall.Core.App Dhall.Core.None _ -> do
|
||||||
return Data.Aeson.Null
|
return Data.Aeson.Null
|
||||||
|
-- Provide a nicer error message for a common user mistake.
|
||||||
|
--
|
||||||
|
-- See: https://github.com/dhall-lang/dhall-lang/issues/492
|
||||||
|
Dhall.Core.None -> do
|
||||||
|
Left BareNone
|
||||||
Dhall.Core.RecordLit a ->
|
Dhall.Core.RecordLit a ->
|
||||||
case toOrderedList a of
|
case toOrderedList a of
|
||||||
[ ( "contents"
|
[ ( "contents"
|
||||||
|
|
Loading…
Reference in New Issue
Block a user