Skip to content

Commit

Permalink
Add support for importing paths as raw Text
Browse files Browse the repository at this point in the history
Part of #23

You can now add ` as Text` to the end of any path and the raw contents at that
path will be imported as a raw `Text` literal.  For example:

```
$ dhall <<< "http://example.com as Text"
Text

"<!doctype html>\n<html>\n<head>\n    <title>Example Domain</title>\n\n    <meta
 charset=\"utf-8\" />\n    <meta http-equiv=\"Content-type\" content=\"text/html
; charset=utf-8\" />\n    <meta name=\"viewport\" content=\"width=device-width,
initial-scale=1\" />\n    <style type=\"text/css\">\n    body {\n        backgro
und-color: #f0f0f2;\n        margin: 0;\n        padding: 0;\n        font-famil
y: \"Open Sans\", \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n        \n
   }\n    div {\n        width: 600px;\n        margin: 5em auto;\n        paddi
ng: 50px;\n        background-color: #fff;\n        border-radius: 1em;\n    }\n
    a:link, a:visited {\n        color: #38488f;\n        text-decoration: none;
\n    }\n    @media (max-width: 700px) {\n        body {\n            background
-color: #fff;\n        }\n        div {\n            width: auto;\n            m
argin: 0 auto;\n            border-radius: 0;\n            padding: 1em;\n
  }\n    }\n    </style>    \n</head>\n\n<body>\n<div>\n    <h1>Example Domain</
h1>\n    <p>This domain is established to be used for illustrative examples in d
ocuments. You may use this\n    domain in examples without prior coordination or
 asking for permission.</p>\n    <p><a href=\"http://www.iana.org/domains/exampl
e\">More information...</a></p>\n</div>\n</body>\n</html>\n"
```
  • Loading branch information
Gabriella439 committed Mar 31, 2017
1 parent dce4b20 commit fbdfa42
Show file tree
Hide file tree
Showing 3 changed files with 202 additions and 141 deletions.
41 changes: 30 additions & 11 deletions src/Dhall/Core.hs
@@ -1,11 +1,12 @@
{-# LANGUAGE BangPatterns #-}
{-# LANGUAGE CPP #-}
{-# LANGUAGE DeriveFoldable #-}
{-# LANGUAGE DeriveFunctor #-}
{-# LANGUAGE DeriveTraversable #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE QuasiQuotes #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE BangPatterns #-}
{-# LANGUAGE CPP #-}
{-# LANGUAGE DeriveFoldable #-}
{-# LANGUAGE DeriveFunctor #-}
{-# LANGUAGE DeriveTraversable #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE QuasiQuotes #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE RecordWildCards #-}
{-# OPTIONS_GHC -Wall #-}

{-| This module contains the core calculus for the Dhall language.
Expand All @@ -18,6 +19,8 @@ module Dhall.Core (
-- * Syntax
Const(..)
, HasHome(..)
, PathType(..)
, PathMode(..)
, Path(..)
, Var(..)
, Expr(..)
Expand Down Expand Up @@ -89,8 +92,8 @@ instance Buildable Const where
-- | Whether or not a path is relative to the user's home directory
data HasHome = Home | Homeless deriving (Eq, Ord, Show)

-- | Path to an external resource
data Path
-- | The type of path to import (i.e. local vs. remote vs. environment)
data PathType
= File HasHome FilePath
-- ^ Local path
| URL Text
Expand All @@ -99,7 +102,7 @@ data Path
-- ^ Environment variable
deriving (Eq, Ord, Show)

instance Buildable Path where
instance Buildable PathType where
build (File Home file)
= "~/" <> build txt
where
Expand All @@ -116,6 +119,22 @@ instance Buildable Path where
build (URL str ) = build str <> " "
build (Env env ) = "env:" <> build env

-- | How to interpret the path's contents (i.e. as Dhall code or raw text)
data PathMode = Code | RawText deriving (Eq, Ord, Show)

-- | Path to an external resource
data Path = Path
{ pathType :: PathType
, pathMode :: PathMode
} deriving (Eq, Ord, Show)

instance Buildable Path where
build (Path {..}) = build pathType <> suffix
where
suffix = case pathMode of
RawText -> " as Text"
Code -> ""

{-| Label for a bound variable
The `Text` field is the variable's name (i.e. \"@x@\").
Expand Down

0 comments on commit fbdfa42

Please sign in to comment.