packages feed

dhall 1.42.2 → 1.42.3

raw patch · 107 files changed

+640/−571 lines, 107 filesdep +microlensdep +microlens-mtldep −lens-family-coredep −profunctorsdep ~template-haskelldep ~timebinary-addedPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

Dependencies added: microlens, microlens-mtl

Dependencies removed: lens-family-core, profunctors

Dependency ranges changed: template-haskell, time

API changes (from Hackage documentation)

- Dhall.Core: type NormalizerM m a = forall s. Expr s a -> m (Maybe (Expr s a))
- Dhall.Deriving: data a <<< b
- Dhall.DirectoryTree: FileEntry :: Entry Text -> FilesystemEntry
- Dhall.Main: [files] :: Mode -> NonEmpty FilePath
- Dhall.Main: [name] :: Mode -> Maybe String
- Dhall.TypeCheck: InvalidHandlerOutputType :: Text -> Expr s a -> Expr s a -> TypeMessage s a
- Dhall.TypeCheck: InvalidListElement :: Int -> Expr s a -> Expr s a -> Expr s a -> TypeMessage s a
- Dhall.TypeCheck: MustUpdateARecord :: Expr s a -> Expr s a -> Expr s a -> TypeMessage s a
- Dhall.TypeCheck: RecordTypeMismatch :: Const -> Const -> Expr s a -> Expr s a -> TypeMessage s a
- Dhall.TypeCheck: type Typer a = forall s. a -> Expr s a
+ Dhall.Core: type NormalizerM (m :: Type -> Type) a = forall s. () => Expr s a -> m Maybe Expr s a
+ Dhall.Deriving: data (a :: k) <<< (b :: k1)
+ Dhall.DirectoryTree: pattern FileEntry :: Entry Text -> FilesystemEntry
+ Dhall.DirectoryTree: type BinaryFileEntry = Entry ByteString
+ Dhall.DirectoryTree: type TextFileEntry = Entry Text
+ Dhall.Main: [packageFiles] :: Mode -> NonEmpty FilePath
+ Dhall.Main: [packageOptions] :: Mode -> Endo Options
+ Dhall.Map: instance GHC.Classes.Ord k => WithIndex.FoldableWithIndex k (Dhall.Map.Map k)
+ Dhall.Map: instance GHC.Classes.Ord k => WithIndex.TraversableWithIndex k (Dhall.Map.Map k)
+ Dhall.Map: instance WithIndex.FunctorWithIndex k (Dhall.Map.Map k)
+ Dhall.Marshal.Decode: ($dmautoWith) :: (FromDhall a, Generic a, GenericFromDhall a (Rep a)) => InputNormalizer -> Decoder a
+ Dhall.Marshal.Encode: ($dminjectWith) :: (ToDhall a, Generic a, GenericToDhall (Rep a)) => InputNormalizer -> Encoder a
+ Dhall.Optics: anyOf :: Getting Any s a -> (a -> Bool) -> s -> Bool
+ Dhall.Package: OnlyThisPackage :: PackagingMode
+ Dhall.Package: RecursiveSubpackages :: PackagingMode
+ Dhall.Package: characterSet :: Lens' Options CharacterSet
+ Dhall.Package: data Options
+ Dhall.Package: data PackagingMode
+ Dhall.Package: defaultOptions :: Options
+ Dhall.Package: packageFileName :: Lens' Options String
+ Dhall.Package: packagingMode :: Lens' Options PackagingMode
+ Dhall.Pretty: defaultCharacterSet :: CharacterSet
+ Dhall.TypeCheck: type Typer a = forall s. () => a -> Expr s a
- Dhall: evaluateSettings :: (HasEvaluateSettings s, Functor f) => LensLike' f s EvaluateSettings
+ Dhall: evaluateSettings :: HasEvaluateSettings s => Lens' s EvaluateSettings
- Dhall: newManager :: (Functor f, HasEvaluateSettings s) => LensLike' f s (IO Manager)
+ Dhall: newManager :: HasEvaluateSettings s => Lens' s (IO Manager)
- Dhall: normalizer :: (Functor f, HasEvaluateSettings s) => LensLike' f s (Maybe (ReifiedNormalizer Void))
+ Dhall: normalizer :: HasEvaluateSettings s => Lens' s (Maybe (ReifiedNormalizer Void))
- Dhall: rootDirectory :: Functor f => LensLike' f InputSettings FilePath
+ Dhall: rootDirectory :: Lens' InputSettings FilePath
- Dhall: sourceName :: Functor f => LensLike' f InputSettings FilePath
+ Dhall: sourceName :: Lens' InputSettings FilePath
- Dhall: startingContext :: (Functor f, HasEvaluateSettings s) => LensLike' f s (Context (Expr Src Void))
+ Dhall: startingContext :: HasEvaluateSettings s => Lens' s (Context (Expr Src Void))
- Dhall: substitutions :: (Functor f, HasEvaluateSettings s) => LensLike' f s (Substitutions Src Void)
+ Dhall: substitutions :: HasEvaluateSettings s => Lens' s (Substitutions Src Void)
- Dhall.Core: internalError :: Text -> forall b. b
+ Dhall.Core: internalError :: Text -> forall b. () => b
- Dhall.Deriving: Codec :: a -> Codec tag a
+ Dhall.Deriving: Codec :: a -> Codec (tag :: k) a
- Dhall.Deriving: [unCodec] :: Codec tag a -> a
+ Dhall.Deriving: [unCodec] :: Codec (tag :: k) a -> a
- Dhall.Deriving: class ModifyOptions a
+ Dhall.Deriving: class ModifyOptions (a :: k)
- Dhall.Deriving: class TextFunction a
+ Dhall.Deriving: class TextFunction (a :: k)
- Dhall.Deriving: data Constructor a
+ Dhall.Deriving: data Constructor (a :: k)
- Dhall.Deriving: data Field a
+ Dhall.Deriving: data Field (a :: k)
- Dhall.Deriving: data SetSingletonConstructors a
+ Dhall.Deriving: data SetSingletonConstructors (a :: k)
- Dhall.Deriving: newtype Codec tag a
+ Dhall.Deriving: newtype Codec (tag :: k) a
- Dhall.DirectoryTree: Access :: f Bool -> f Bool -> f Bool -> Access f
+ Dhall.DirectoryTree: Access :: f Bool -> f Bool -> f Bool -> Access (f :: Type -> Type)
- Dhall.DirectoryTree: BinaryFileEntry :: Entry ByteString -> FilesystemEntry
+ Dhall.DirectoryTree: BinaryFileEntry :: BinaryFileEntry -> FilesystemEntry
- Dhall.DirectoryTree: Mode :: f (Access f) -> f (Access f) -> f (Access f) -> Mode f
+ Dhall.DirectoryTree: Mode :: f (Access f) -> f (Access f) -> f (Access f) -> Mode (f :: Type -> Type)
- Dhall.DirectoryTree: TextFileEntry :: Entry Text -> FilesystemEntry
+ Dhall.DirectoryTree: TextFileEntry :: TextFileEntry -> FilesystemEntry
- Dhall.DirectoryTree: [accessExecute] :: Access f -> f Bool
+ Dhall.DirectoryTree: [accessExecute] :: Access (f :: Type -> Type) -> f Bool
- Dhall.DirectoryTree: [accessRead] :: Access f -> f Bool
+ Dhall.DirectoryTree: [accessRead] :: Access (f :: Type -> Type) -> f Bool
- Dhall.DirectoryTree: [accessWrite] :: Access f -> f Bool
+ Dhall.DirectoryTree: [accessWrite] :: Access (f :: Type -> Type) -> f Bool
- Dhall.DirectoryTree: [modeGroup] :: Mode f -> f (Access f)
+ Dhall.DirectoryTree: [modeGroup] :: Mode (f :: Type -> Type) -> f (Access f)
- Dhall.DirectoryTree: [modeOther] :: Mode f -> f (Access f)
+ Dhall.DirectoryTree: [modeOther] :: Mode (f :: Type -> Type) -> f (Access f)
- Dhall.DirectoryTree: [modeUser] :: Mode f -> f (Access f)
+ Dhall.DirectoryTree: [modeUser] :: Mode (f :: Type -> Type) -> f (Access f)
- Dhall.DirectoryTree: data Access f
+ Dhall.DirectoryTree: data Access (f :: Type -> Type)
- Dhall.DirectoryTree: data Mode f
+ Dhall.DirectoryTree: data Mode (f :: Type -> Type)
- Dhall.DirectoryTree: type DirectoryEntry = Entry (Seq FilesystemEntry)
+ Dhall.DirectoryTree: type DirectoryEntry = Entry Seq FilesystemEntry
- Dhall.Import: cache :: Functor f => LensLike' f Status (Map Chained ImportSemantics)
+ Dhall.Import: cache :: Lens' Status (Map Chained ImportSemantics)
- Dhall.Import: graph :: Functor f => LensLike' f Status [Depends]
+ Dhall.Import: graph :: Lens' Status [Depends]
- Dhall.Import: normalizer :: Functor f => LensLike' f Status (Maybe (ReifiedNormalizer Void))
+ Dhall.Import: normalizer :: Lens' Status (Maybe (ReifiedNormalizer Void))
- Dhall.Import: remote :: Functor f => LensLike' f Status (URL -> StateT Status IO Text)
+ Dhall.Import: remote :: Lens' Status (URL -> StateT Status IO Text)
- Dhall.Import: stack :: Functor f => LensLike' f Status (NonEmpty Chained)
+ Dhall.Import: stack :: Lens' Status (NonEmpty Chained)
- Dhall.Import: startingContext :: Functor f => LensLike' f Status (Context (Expr Src Void))
+ Dhall.Import: startingContext :: Lens' Status (Context (Expr Src Void))
- Dhall.Import: substitutions :: Functor f => LensLike' f Status (Substitutions Src Void)
+ Dhall.Import: substitutions :: Lens' Status (Substitutions Src Void)
- Dhall.Main: Package :: Maybe String -> NonEmpty FilePath -> Mode
+ Dhall.Main: Package :: Endo Options -> NonEmpty FilePath -> Mode
- Dhall.Map: traverseWithKey :: Ord k => Applicative f => (k -> a -> f b) -> Map k a -> f (Map k b)
+ Dhall.Map: traverseWithKey :: (Ord k, Applicative f) => (k -> a -> f b) -> Map k a -> f (Map k b)
- Dhall.Map: unorderedTraverseWithKey :: Ord k => Applicative f => (k -> a -> f b) -> Map k a -> f (Map k b)
+ Dhall.Map: unorderedTraverseWithKey :: (Ord k, Applicative f) => (k -> a -> f b) -> Map k a -> f (Map k b)
- Dhall.Map: unorderedTraverseWithKey_ :: Ord k => Applicative f => (k -> a -> f ()) -> Map k a -> f ()
+ Dhall.Map: unorderedTraverseWithKey_ :: (Ord k, Applicative f) => (k -> a -> f ()) -> Map k a -> f ()
- Dhall.Marshal.Decode: RecordDecoder :: Product (Const (Map Text (Expector (Expr Src Void)))) (Compose ((->) (Expr Src Void)) (Extractor Src Void)) a -> RecordDecoder a
+ Dhall.Marshal.Decode: RecordDecoder :: Product (Const (Map Text (Expector (Expr Src Void))) :: Type -> Type) (Compose ((->) (Expr Src Void)) (Extractor Src Void)) a -> RecordDecoder a
- Dhall.Marshal.Decode: autoWith :: (FromDhall a, Generic a, GenericFromDhall a (Rep a)) => InputNormalizer -> Decoder a
+ Dhall.Marshal.Decode: autoWith :: FromDhall a => InputNormalizer -> Decoder a
- Dhall.Marshal.Decode: class () => Generic a
+ Dhall.Marshal.Decode: class Generic a
- Dhall.Marshal.Decode: class GenericFromDhall t f
+ Dhall.Marshal.Decode: class GenericFromDhall (t :: k) (f :: k1 -> Type)
- Dhall.Marshal.Decode: class GenericFromDhallUnion t f
+ Dhall.Marshal.Decode: class GenericFromDhallUnion (t :: k) (f :: k1 -> Type)
- Dhall.Marshal.Decode: data () => Natural
+ Dhall.Marshal.Decode: data Natural
- Dhall.Marshal.Decode: data Result f
+ Dhall.Marshal.Decode: data Result (f :: Type -> Type)
- Dhall.Marshal.Decode: data () => Seq a
+ Dhall.Marshal.Decode: data Seq a
- Dhall.Marshal.Decode: data () => Text
+ Dhall.Marshal.Decode: data Text
- Dhall.Marshal.Decode: data () => Vector a
+ Dhall.Marshal.Decode: data Vector a
- Dhall.Marshal.Decode: genericAutoWithNormalizer :: GenericFromDhall t f => Proxy t -> InputNormalizer -> InterpretOptions -> State Int (Decoder (f a))
+ Dhall.Marshal.Decode: genericAutoWithNormalizer :: forall (a :: k1). GenericFromDhall t f => Proxy t -> InputNormalizer -> InterpretOptions -> State Int (Decoder (f a))
- Dhall.Marshal.Decode: genericUnionAutoWithNormalizer :: GenericFromDhallUnion t f => Proxy t -> InputNormalizer -> InterpretOptions -> UnionDecoder (f a)
+ Dhall.Marshal.Decode: genericUnionAutoWithNormalizer :: forall (a :: k1). GenericFromDhallUnion t f => Proxy t -> InputNormalizer -> InterpretOptions -> UnionDecoder (f a)
- Dhall.Marshal.Decode: type ExtractErrors s a = DhallErrors (ExtractError s a)
+ Dhall.Marshal.Decode: type ExtractErrors s a = DhallErrors ExtractError s a
- Dhall.Marshal.Decode: type Extractor s a = Validation (ExtractErrors s a)
+ Dhall.Marshal.Decode: type Extractor s a = Validation ExtractErrors s a
- Dhall.Marshal.Decode: type MonadicExtractor s a = Either (ExtractErrors s a)
+ Dhall.Marshal.Decode: type MonadicExtractor s a = Either ExtractErrors s a
- Dhall.Marshal.Encode: UnionEncoder :: Product (Const (Map Text (Expr Src Void))) (Op (Text, Expr Src Void)) a -> UnionEncoder a
+ Dhall.Marshal.Encode: UnionEncoder :: Product (Const (Map Text (Expr Src Void)) :: Type -> Type) (Op (Text, Expr Src Void)) a -> UnionEncoder a
- Dhall.Marshal.Encode: class () => Generic a
+ Dhall.Marshal.Encode: class Generic a
- Dhall.Marshal.Encode: class GenericToDhall f
+ Dhall.Marshal.Encode: class GenericToDhall (f :: Type -> Type)
- Dhall.Marshal.Encode: data () => Natural
+ Dhall.Marshal.Encode: data Natural
- Dhall.Marshal.Encode: data Result f
+ Dhall.Marshal.Encode: data Result (f :: Type -> Type)
- Dhall.Marshal.Encode: data () => Seq a
+ Dhall.Marshal.Encode: data Seq a
- Dhall.Marshal.Encode: data () => Text
+ Dhall.Marshal.Encode: data Text
- Dhall.Marshal.Encode: data () => Vector a
+ Dhall.Marshal.Encode: data Vector a
- Dhall.Marshal.Encode: injectWith :: (ToDhall a, Generic a, GenericToDhall (Rep a)) => InputNormalizer -> Encoder a
+ Dhall.Marshal.Encode: injectWith :: ToDhall a => InputNormalizer -> Encoder a
- Dhall.Optics: cosmosOf :: (Applicative f, Contravariant f) => LensLike' f a a -> LensLike' f a a
+ Dhall.Optics: cosmosOf :: Traversal s t s t -> Traversal s t s b
- Dhall.Optics: to :: (Profunctor p, Contravariant f) => (s -> a) -> Optic' p f s a
+ Dhall.Optics: to :: (s -> a) -> SimpleGetter s a
- Dhall.Optics: type Optic p f s t a b = p a (f b) -> p s (f t)
+ Dhall.Optics: type Optic (p :: Type -> Type -> Type) (f :: Type -> Type) s t a b = p a f b -> p s f t
- Dhall.Optics: type Optic' p f s a = Optic p f s s a a
+ Dhall.Optics: type Optic' (p :: Type -> Type -> Type) (f :: Type -> Type) s a = Optic p f s s a a
- Dhall.Package: getPackagePathAndContent :: Maybe String -> NonEmpty FilePath -> IO (FilePath, Expr s Import)
+ Dhall.Package: getPackagePathAndContent :: Options -> NonEmpty FilePath -> IO (FilePath, Expr s Import)
- Dhall.Package: writePackage :: CharacterSet -> Maybe String -> NonEmpty FilePath -> IO ()
+ Dhall.Package: writePackage :: Options -> NonEmpty FilePath -> IO ()
- Dhall.Parser.Expression: parsers :: forall a. Parser a -> Parsers a
+ Dhall.Parser.Expression: parsers :: Parser a -> Parsers a
- Dhall.Substitution: type Substitutions s a = Map Text (Expr s a)
+ Dhall.Substitution: type Substitutions s a = Map Text Expr s a

Files

CHANGELOG.md view
@@ -1,3 +1,12 @@+1.42.3++* [Fix the typechecking rule for `Optional` + `with`](https://github.com/dhall-lang/dhall-haskell/pull/2650)+* [Add `*WithIndex` instances for `Map`](https://github.com/dhall-lang/dhall-haskell/pull/2633)+* [`dhall package`: Add support for automatic sub-packags](https://github.com/dhall-lang/dhall-haskell/pull/2639)+* [`dhall to-directory-tree`: Add `binary-file` support](https://github.com/dhall-lang/dhall-haskell/pull/2641)+* [Support GHC 9.12.1](https://github.com/dhall-lang/dhall-haskell/pull/2649)+* [`dhall to-directory-tree`: create parents of files when using fixpoint representation](https://github.com/dhall-lang/dhall-haskell/pull/2653)+ 1.42.2  * [Supports standard version 23.1.0](https://github.com/dhall-lang/dhall-lang/releases/tag/v23.1.0)
+ dhall-lang/Prelude/DirectoryTree/Entry/BinaryFileEntry.dhall view
@@ -0,0 +1,6 @@+let Entry =+        missing+          sha256:75148ae19175750e38705e11cda8dcc775b2ac08f22518ff2ef3f33a6273ef15+      ? ./Type.dhall++in  Entry Bytes
− dhall-lang/Prelude/DirectoryTree/Entry/FileEntry.dhall
@@ -1,6 +0,0 @@-let Entry =-        missing-          sha256:75148ae19175750e38705e11cda8dcc775b2ac08f22518ff2ef3f33a6273ef15-      ? ./Type.dhall--in  Entry Text
+ dhall-lang/Prelude/DirectoryTree/Entry/TextFileEntry.dhall view
@@ -0,0 +1,6 @@+let Entry =+        missing+          sha256:75148ae19175750e38705e11cda8dcc775b2ac08f22518ff2ef3f33a6273ef15+      ? ./Type.dhall++in  Entry Text
+ dhall-lang/Prelude/DirectoryTree/Entry/binary-file.dhall view
@@ -0,0 +1,6 @@+let Entry =+        missing+          sha256:742610b2a13e55ae6e344b54aa8a7ee1bfec8e8b313a1132eae9286309b520e6+      ? ./entry.dhall++in  Entry Bytes
− dhall-lang/Prelude/DirectoryTree/Entry/file.dhall
@@ -1,6 +0,0 @@-let Entry =-        missing-          sha256:742610b2a13e55ae6e344b54aa8a7ee1bfec8e8b313a1132eae9286309b520e6-      ? ./entry.dhall--in  Entry Text
dhall-lang/Prelude/DirectoryTree/Entry/package.dhall view
@@ -1,19 +1,27 @@-{ Directory =+{ BinaryFileEntry =       missing+        sha256:f027db2893f6f38bbe6d868a91f22de530e85407237f00b147427c87d32bf55c+    ? ./BinaryFileEntry.dhall+, DirectoryEntry =+      missing         sha256:163a4536fdd05ce122d793ceda01d03fcffb29463817ae8b7b5601bf4a06ce6e     ? ./DirectoryEntry.dhall-, File =-      missing-        sha256:23a8cb29d96aeb623501519d9a62c5c49659e8d1c30b4ae4f2399809e3fd3a01-    ? ./FileEntry.dhall , Metadata =       missing         sha256:8c240a00094238a73904af63ac0924b3e6aba1655312f20a2a27f88554e2febe     ? ./Metadata.dhall+, TextFileEntry =+      missing+        sha256:23a8cb29d96aeb623501519d9a62c5c49659e8d1c30b4ae4f2399809e3fd3a01+    ? ./TextFileEntry.dhall , Type =       missing         sha256:75148ae19175750e38705e11cda8dcc775b2ac08f22518ff2ef3f33a6273ef15     ? ./Type.dhall+, binary-file =+      missing+        sha256:bd49df43268c259e3d0bef995917c3ab517ae7b98bf1faac8f4a7e8a602e3465+    ? ./binary-file.dhall , directory =       missing         sha256:0bee17310a21efa5b06f139b6731fdcee4f9e0245ef711c2b0127b8938dfed2e@@ -22,8 +30,8 @@       missing         sha256:742610b2a13e55ae6e344b54aa8a7ee1bfec8e8b313a1132eae9286309b520e6     ? ./entry.dhall-, file =+, text-file =       missing         sha256:c5d76fd43216668d03df9945183fe7b3c55486aedcc77324c3372bd63e283b78-    ? ./file.dhall+    ? ./text-file.dhall }
+ dhall-lang/Prelude/DirectoryTree/Entry/text-file.dhall view
@@ -0,0 +1,6 @@+let Entry =+        missing+          sha256:742610b2a13e55ae6e344b54aa8a7ee1bfec8e8b313a1132eae9286309b520e6+      ? ./entry.dhall++in  Entry Text
dhall-lang/Prelude/DirectoryTree/Tree/Make.dhall view
@@ -3,10 +3,18 @@           sha256:163a4536fdd05ce122d793ceda01d03fcffb29463817ae8b7b5601bf4a06ce6e       ? ../Entry/DirectoryEntry.dhall -let File =+let BinaryFile =         missing+          sha256:f027db2893f6f38bbe6d868a91f22de530e85407237f00b147427c87d32bf55c+      ? ../Entry/BinaryFileEntry.dhall++let TextFile =+        missing           sha256:23a8cb29d96aeb623501519d9a62c5c49659e8d1c30b4ae4f2399809e3fd3a01-      ? ../Entry/FileEntry.dhall+      ? ../Entry/TextFileEntry.dhall  in  \(tree : Type) ->-      { directory : Directory tree -> tree, file : File -> tree }+      { directory : Directory tree -> tree+      , binary-file : BinaryFile -> tree+      , file : TextFile -> tree+      }
dhall-lang/Prelude/DirectoryTree/Tree/Type.dhall view
@@ -1,6 +1,6 @@ let Make =         missing-          sha256:235d511ed943dded33b46b1717df263037329394e27fb4b9c677eda5af924458+          sha256:33c52c16f76b41c3635b57a38ce0286f1ad8b3163a3f07a3b41b808ac5bfeb5b       ? ./Make.dhall  in  forall (tree : Type) -> forall (make : Make tree) -> List tree
dhall-lang/Prelude/DirectoryTree/Tree/makeTree.dhall view
@@ -5,7 +5,7 @@ -} let Make =         missing-          sha256:235d511ed943dded33b46b1717df263037329394e27fb4b9c677eda5af924458+          sha256:33c52c16f76b41c3635b57a38ce0286f1ad8b3163a3f07a3b41b808ac5bfeb5b       ? ./Make.dhall  let Metadata =
dhall-lang/Prelude/DirectoryTree/Tree/makeTreeFromList.dhall view
@@ -6,7 +6,7 @@ -} let Make =         missing-          sha256:235d511ed943dded33b46b1717df263037329394e27fb4b9c677eda5af924458+          sha256:33c52c16f76b41c3635b57a38ce0286f1ad8b3163a3f07a3b41b808ac5bfeb5b       ? ./Make.dhall  let Metadata =@@ -21,7 +21,7 @@  let makeTreesFromList =         missing-          sha256:34ed54a0fc4072cbcb32d0b40adc3ad4e5d978c8dcd7fece9670bf0616f4ab18+          sha256:02fce5b194da66c2f98bd05af0a3bfdccf0b57d7971f17bcafee436652d9a88e       ? ./makeTreesFromList.dhall  let makeTreeFromList
dhall-lang/Prelude/DirectoryTree/Tree/makeTreesFromList.dhall view
@@ -5,7 +5,7 @@ -} let Make =         missing-          sha256:235d511ed943dded33b46b1717df263037329394e27fb4b9c677eda5af924458+          sha256:33c52c16f76b41c3635b57a38ce0286f1ad8b3163a3f07a3b41b808ac5bfeb5b       ? ./Make.dhall  let Metadata =
dhall-lang/Prelude/DirectoryTree/Tree/package.dhall view
@@ -1,21 +1,21 @@ { Make =       missing-        sha256:235d511ed943dded33b46b1717df263037329394e27fb4b9c677eda5af924458+        sha256:33c52c16f76b41c3635b57a38ce0286f1ad8b3163a3f07a3b41b808ac5bfeb5b     ? ./Make.dhall , Type =       missing-        sha256:01820cec8324cb701b6cc99e1dbbc8aacf0115db7795c6c3a023e4f1818fea79+        sha256:60b4d351213c6d851d7b2163ada40290b3c492a27326a2066fdec1a3915fb33b     ? ./Type.dhall , makeTree =       missing-        sha256:e67054bceeb8f55968d89dbaa4b60b726a4ec544e49bd0c5622d5b487610e804+        sha256:2c1339fa63b4947864e1a6eede3c296288b53cf91a09d0d6881ae56790342e44     ? ./makeTree.dhall , makeTreeFromList =       missing-        sha256:ca73533264b52ed9eb29f51e7ac6dfc83c94c9051c5c52486d84b4a3ef7f0274+        sha256:b894c9398e123d7262320684ac6301c2efe44d9d4f5a303b99d14e9be6b3150f     ? ./makeTreeFromList.dhall , makeTreesFromList =       missing-        sha256:34ed54a0fc4072cbcb32d0b40adc3ad4e5d978c8dcd7fece9670bf0616f4ab18+        sha256:02fce5b194da66c2f98bd05af0a3bfdccf0b57d7971f17bcafee436652d9a88e     ? ./makeTreesFromList.dhall }
dhall-lang/Prelude/DirectoryTree/package.dhall view
@@ -4,7 +4,7 @@     ? ./Access/package.dhall , Entry =       missing-        sha256:86da03766dbfeab3750ecd1012f6155dd904024351be20085dac3c79f27b22c7+        sha256:795db8b6c2bc28fdff6fbcc832c5b4cb6931c1f62ffa84674280c24d4f2eacd8     ? ./Entry/package.dhall , Group =       missing@@ -16,7 +16,7 @@     ? ./Mode/package.dhall , Tree =       missing-        sha256:d2cb84de6b084bfaeb42e6212e7085be9ee03ff2684cf9d04e0d8b4478f42aa7+        sha256:6a64c27fa8a0c95830a4cc836651257235da0d985b7f93d11813cdb7a72e646b     ? ./Tree/package.dhall , User =       missing
dhall-lang/tests/parser/success/builtinsA.dhall view
@@ -1,37 +1,40 @@-[ Natural/fold-, Natural/build-, Natural/isZero-, Natural/even-, Natural/odd-, Natural/toInteger-, Natural/show-, Integer/toDouble-, Integer/show-, Integer/negate-, Integer/clamp-, Natural/subtract+[ Date/show , Double/show+, Integer/clamp+, Integer/negate+, Integer/show+, Integer/toDouble , List/build , List/fold-, List/length , List/head-, List/last , List/indexed+, List/last+, List/length , List/reverse-, Text/show+, Natural/build+, Natural/even+, Natural/fold+, Natural/isZero+, Natural/odd+, Natural/show+, Natural/subtract+, Natural/toInteger , Text/replace+, Text/show+, Time/show+, TimeZone/show , Bool-, True+, Bytes+, Date+, Double , False-, Optional-, None-, Natural , Integer-, Double-, Text-, Bytes , List-, Type-, Kind-, Sort+, Natural+, None+, Optional+, Text+, Time+, TimeZone+, True ]
dhall-lang/tests/parser/success/builtinsB.dhallb view
@@ -1,1 +1,1 @@-˜&ölNatural/foldmNatural/buildnNatural/isZerolNatural/evenkNatural/oddqNatural/toIntegerlNatural/showpInteger/toDoublelInteger/shownInteger/negatemInteger/clamppNatural/subtractkDouble/showjList/buildiList/foldkList/lengthiList/headiList/lastlList/indexedlList/reverseiText/showlText/replacedBoolõôhOptionaldNonegNaturalgIntegerfDoubledTexteBytesdListdTypedKinddSort+˜)öiDate/showkDouble/showmInteger/clampnInteger/negatelInteger/showpInteger/toDoublejList/buildiList/foldiList/headlList/indexediList/lastkList/lengthlList/reversemNatural/buildlNatural/evenlNatural/foldnNatural/isZerokNatural/oddlNatural/showpNatural/subtractqNatural/toIntegerlText/replaceiText/showiTime/showmTimeZone/showdBooleBytesdDatefDoubleôgIntegerdListgNaturaldNonehOptionaldTextdTimehTimeZoneõ
+ dhall-lang/tests/parser/success/listWithCommentA.dhall view
@@ -0,0 +1,3 @@+[+  1, -- item one+{- foo -} 2, 3 ]
+ dhall-lang/tests/parser/success/listWithCommentB.dhallb view
@@ -0,0 +1,1 @@+…ö‚‚‚
+ dhall-lang/tests/parser/success/mixedBlockLineCommentA.dhall view
@@ -0,0 +1,6 @@+{- foo -}+-- bar+{- --baz -}+-- {- qux -}++1
+ dhall-lang/tests/parser/success/mixedBlockLineCommentB.dhallb view
@@ -0,0 +1,1 @@
+ dhall-lang/tests/parser/success/text/multilinePreserveCommentA.dhall view
@@ -0,0 +1,8 @@+{- A comment within the interior of a multi-line literal counts as part of the+   literal+-}++''+-- Hello+{- world -}+''
+ dhall-lang/tests/parser/success/text/multilinePreserveCommentB.dhallb view
@@ -0,0 +1,2 @@+‚u-- Hello+{- world -}
dhall-lang/tests/parser/success/text/preserveCommentA.dhall view
@@ -1,8 +1,1 @@-{- A comment within the interior of a multi-line literal counts as part of the-   literal--}--''--- Hello-{- world -}-''+"-- $--$--{--}$"
dhall-lang/tests/parser/success/text/preserveCommentB.dhallb view
@@ -1,2 +1,1 @@-‚u-- Hello-{- world -}+‚n-- $--$--{--}$
+ dhall-lang/tests/parser/success/text/unicodeBracedA.dhall view
@@ -0,0 +1,1 @@+"\u{1}\u{10}\u{100}\u{1000}\u{10000}\u{100000}"
+ dhall-lang/tests/parser/success/text/unicodeBracedB.dhallb view
@@ -0,0 +1,1 @@+‚oĀက𐀀ô€€€
+ dhall-lang/tests/parser/success/text/unicodeEscapedA.dhall view
@@ -0,0 +1,1 @@+"A\u2115B\u{1FA00}C\u{43}D\u{00000001F574}E\u0022F"
+ dhall-lang/tests/parser/success/text/unicodeEscapedB.dhallb view
@@ -0,0 +1,1 @@+‚sAℕB🨀CCD🕴E"F
+ dhall-lang/tests/parser/success/text/unicodePlane16A.dhall view
@@ -0,0 +1,1 @@+"\u{10fffd}\u{1fffd}"
+ dhall-lang/tests/parser/success/text/unicodePlane16B.dhallb view
@@ -0,0 +1,1 @@+‚hô¿½ðŸ¿½
+ dhall-lang/tests/parser/success/unit/DeBruijnIndexA.dhall view
@@ -0,0 +1,1 @@+x == x@0
+ dhall-lang/tests/parser/success/unit/DeBruijnIndexB.dhallb view

binary file changed (absent → 11 bytes)

− dhall-lang/tests/parser/success/unit/DoubleLitSecretelyIntA.dhall
@@ -1,5 +0,0 @@-{--    Some languages do not make principled distinctions between number types, so-    this checks that this Double is not silently considered as a Natural--}-1.0
− dhall-lang/tests/parser/success/unit/DoubleLitSecretelyIntB.dhallb

binary file changed (3 → absent bytes)

+ dhall-lang/tests/parser/success/unit/DoubleLitSecretlyIntA.dhall view
@@ -0,0 +1,5 @@+{-+    Some languages do not make principled distinctions between number types, so+    this checks that this Double is not silently considered as a Natural+-}+1.0
+ dhall-lang/tests/parser/success/unit/DoubleLitSecretlyIntB.dhallb view

binary file changed (absent → 3 bytes)

+ dhall-lang/tests/parser/success/unit/ForallUnicodeA.dhall view
@@ -0,0 +1,1 @@+∀(x : T) -> y
+ dhall-lang/tests/parser/success/unit/ForallUnicodeB.dhallb view

binary file changed (absent → 12 bytes)

+ dhall-lang/tests/parser/success/unit/ListWithNewlineA.dhall view
@@ -0,0 +1,11 @@+[ [+    1,+    2,+    3,+  ]+, [+  , 1+  , 2+  , 3+  ]+]
+ dhall-lang/tests/parser/success/unit/ListWithNewlineB.dhallb view
@@ -0,0 +1,1 @@+„ö…ö‚‚‚…ö‚‚‚
− dhall-lang/tests/parser/success/unit/RecordFieldAccessA.dhall
@@ -1,1 +0,0 @@-r.x
− dhall-lang/tests/parser/success/unit/RecordFieldAccessB.dhallb

binary file changed (8 → absent bytes)

+ dhall-lang/tests/parser/success/unit/RecordLitEmptyBothCommasA.dhall view
@@ -0,0 +1,1 @@+{ , =, }
+ dhall-lang/tests/parser/success/unit/RecordLitEmptyBothCommasB.dhallb view
@@ -0,0 +1,1 @@+‚ 
− dhall-lang/tests/parser/success/unit/RecordProjectFieldsA.dhall
@@ -1,1 +0,0 @@-r.{ x, y, z }
− dhall-lang/tests/parser/success/unit/RecordProjectFieldsB.dhallb

binary file changed (12 → absent bytes)

+ dhall-lang/tests/parser/success/unit/RecordTypeEmptyA.dhall view
@@ -0,0 +1,1 @@+{}
+ dhall-lang/tests/parser/success/unit/RecordTypeEmptyB.dhallb view
@@ -0,0 +1,1 @@+‚ 
+ dhall-lang/tests/parser/success/unit/ShowConstructorA.dhall view
@@ -0,0 +1,1 @@+showConstructor <A>.A
+ dhall-lang/tests/parser/success/unit/ShowConstructorB.dhallb view
@@ -0,0 +1,1 @@+‚"ƒ	‚¡aAöaA
+ dhall-lang/tests/parser/success/unit/ShowConstructorWithValueA.dhall view
@@ -0,0 +1,1 @@+showConstructor (<A : Bool>.A False)
+ dhall-lang/tests/parser/success/unit/ShowConstructorWithValueB.dhallb view

binary file changed (absent → 20 bytes)

+ dhall-lang/tests/parser/success/unit/operators/EquivalenceAssocA.dhall view
@@ -0,0 +1,1 @@+w === x === y === z
+ dhall-lang/tests/parser/success/unit/operators/EquivalenceAssocB.dhallb view

binary file changed (absent → 25 bytes)

dhall-lang/tests/parser/success/unit/operators/RecursiveRecordMergeA.dhall view
@@ -1,1 +1,1 @@-x //\\ y+x /\ y
dhall-lang/tests/parser/success/unit/operators/RecursiveRecordMergeAssocA.dhall view
@@ -1,1 +1,1 @@-w //\\ x //\\ y //\\ z+w /\ x /\ y /\ z
dhall-lang/tests/parser/success/unit/operators/RecursiveRecordMergeAssocB.dhallb view

binary file changed (25 → 25 bytes)

dhall-lang/tests/parser/success/unit/operators/RecursiveRecordMergeB.dhallb view

binary file changed (11 → 11 bytes)

dhall-lang/tests/parser/success/unit/operators/RecursiveRecordTypeMergeA.dhall view
@@ -1,1 +1,1 @@-x /\ y+x //\\ y
dhall-lang/tests/parser/success/unit/operators/RecursiveRecordTypeMergeAssocA.dhall view
@@ -1,1 +1,1 @@-w /\ x /\ y /\ z+w //\\ x //\\ y //\\ z
dhall-lang/tests/parser/success/unit/operators/RecursiveRecordTypeMergeAssocB.dhallb view

binary file changed (25 → 25 bytes)

dhall-lang/tests/parser/success/unit/operators/RecursiveRecordTypeMergeB.dhallb view

binary file changed (11 → 11 bytes)

dhall.cabal view
@@ -1,6 +1,6 @@ Cabal-Version: 2.4 Name: dhall-Version: 1.42.2+Version: 1.42.3 Build-Type: Simple License: BSD-3-Clause License-File: LICENSE@@ -215,7 +215,7 @@         case-insensitive                           < 1.3 ,         cborg                       >= 0.2.0.0  && < 0.3 ,         cborg-json                  >= 0.2.2.0  && < 0.3 ,-        containers                  >= 0.5.8.0  && < 0.8 ,+        containers                  >= 0.5.8.0  && < 0.9 ,         contravariant                              < 1.6 ,         data-fix                                   < 0.4 ,         deepseq                                    < 1.6 ,@@ -229,23 +229,23 @@         haskeline                   >= 0.7.2.1  && < 0.9 ,         hashable                    >= 1.2      && < 1.6 ,         indexed-traversable                        < 0.2 ,-        lens-family-core            >= 1.0.0    && < 2.2 ,+        microlens                   >= 0.4.14.0 && < 0.5 ,+        microlens-mtl               >= 0.1      && < 0.3 ,         -- megaparsec follows SemVer: https://github.com/mrkkrp/megaparsec/issues/469#issuecomment-927918469         megaparsec                  >= 8        && < 10  ,         mmorph                                     < 1.3 ,         mtl                         >= 2.2.1    && < 2.4 ,         network-uri                 >= 2.6      && < 2.7 ,-        optparse-applicative        >= 0.14.0.0 && < 0.19,+        optparse-applicative        >= 0.14.0.0 && < 0.20,         parsers                     >= 0.12.4   && < 0.13,         parser-combinators                               ,         prettyprinter               >= 1.7.0    && < 1.8 ,         prettyprinter-ansi-terminal >= 1.1.2    && < 1.2 ,         pretty-simple                              < 4.2 ,-        profunctors                 >= 3.1.2    && < 5.7 ,         repline                     >= 0.4.0.0  && < 0.5 ,         serialise                   >= 0.2.0.0  && < 0.3 ,         scientific                  >= 0.3.0.0  && < 0.4 ,-        template-haskell            >= 2.13.0.0 && < 2.23,+        template-haskell            >= 2.13.0.0 && < 2.24,         text                        >= 0.11.1.0 && < 2.2 ,         text-manipulate             >= 0.2.0.1  && < 0.4 ,         text-short                  >= 0.1      && < 0.2 ,@@ -447,7 +447,7 @@         generic-random            >= 1.3.0.0  && < 1.6 ,         http-client                                    ,         http-client-tls                                ,-        QuickCheck                >= 2.14     && < 2.16,+        QuickCheck                >= 2.14     && < 2.17,         quickcheck-instances      >= 0.3.12   && < 0.4 ,         special-values                           < 0.2 ,         spoon                                    < 0.4 ,
src/Dhall.hs view
@@ -69,7 +69,8 @@ import Dhall.Syntax           (Expr (..), Import) import Dhall.TypeCheck        (DetailedTypeError (..), TypeError) import GHC.Generics-import Lens.Family            (LensLike', view)+import Lens.Micro             (Lens', lens)+import Lens.Micro.Extras      (view) import Prelude                hiding (maybe, sequence) import System.FilePath        (takeDirectory) @@ -83,7 +84,7 @@ import qualified Dhall.Pretty.Internal import qualified Dhall.Substitution import qualified Dhall.TypeCheck-import qualified Lens.Family+import qualified Lens.Micro                       as Lens  import Dhall.Marshal.Decode import Dhall.Marshal.Encode@@ -111,22 +112,16 @@ -- | Access the directory to resolve imports relative to. -- -- @since 1.16-rootDirectory-  :: (Functor f)-  => LensLike' f InputSettings FilePath-rootDirectory k s =-  fmap (\x -> s { _rootDirectory = x }) (k (_rootDirectory s))+rootDirectory :: Lens' InputSettings FilePath+rootDirectory = lens _rootDirectory (\s x -> s { _rootDirectory = x })  -- | Access the name of the source to report locations from; this is -- only used in error messages, so it's okay if this is a best guess -- or something symbolic. -- -- @since 1.16-sourceName-  :: (Functor f)-  => LensLike' f InputSettings FilePath-sourceName k s =-  fmap (\x -> s { _sourceName = x}) (k (_sourceName s))+sourceName :: Lens' InputSettings FilePath+sourceName = lens _sourceName (\s x -> s { _sourceName = x})  -- | @since 1.16 data EvaluateSettings = EvaluateSettings@@ -152,59 +147,49 @@ -- -- @since 1.16 startingContext-  :: (Functor f, HasEvaluateSettings s)-  => LensLike' f s (Dhall.Context.Context (Expr Src Void))-startingContext = evaluateSettings . l-  where-    l :: (Functor f)-      => LensLike' f EvaluateSettings (Dhall.Context.Context (Expr Src Void))-    l k s = fmap (\x -> s { _startingContext = x}) (k (_startingContext s))+  :: (HasEvaluateSettings s)+  => Lens' s (Dhall.Context.Context (Expr Src Void))+startingContext =+    evaluateSettings+        . lens _startingContext (\s x -> s { _startingContext = x})  -- | Access the custom substitutions. -- -- @since 1.30 substitutions-  :: (Functor f, HasEvaluateSettings s)-  => LensLike' f s (Dhall.Substitution.Substitutions Src Void)-substitutions = evaluateSettings . l-  where-    l :: (Functor f)-      => LensLike' f EvaluateSettings (Dhall.Substitution.Substitutions Src Void)-    l k s = fmap (\x -> s { _substitutions = x }) (k (_substitutions s))+  :: (HasEvaluateSettings s)+  => Lens' s (Dhall.Substitution.Substitutions Src Void)+substitutions =+    evaluateSettings+        . lens _substitutions (\s x -> s { _substitutions = x })  -- | Access the custom normalizer. -- -- @since 1.16 normalizer-  :: (Functor f, HasEvaluateSettings s)-  => LensLike' f s (Maybe (Core.ReifiedNormalizer Void))-normalizer = evaluateSettings . l-  where-    l :: (Functor f)-      => LensLike' f EvaluateSettings (Maybe (Core.ReifiedNormalizer Void))-    l k s = fmap (\x -> s { _normalizer = x }) (k (_normalizer s))+  :: (HasEvaluateSettings s)+  => Lens' s (Maybe (Core.ReifiedNormalizer Void))+normalizer =+    evaluateSettings+        . lens _normalizer (\s x -> s { _normalizer = x })  -- | Access the HTTP manager initializer. -- -- @since 1.36 newManager-  :: (Functor f, HasEvaluateSettings s)-  => LensLike' f s (IO Dhall.Import.Manager)-newManager = evaluateSettings . l-  where-    l :: (Functor f)-      => LensLike' f EvaluateSettings (IO Dhall.Import.Manager)-    l k s = fmap (\x -> s { _newManager = x }) (k (_newManager s))+  :: (HasEvaluateSettings s)+  => Lens' s (IO Dhall.Import.Manager)+newManager =+    evaluateSettings+        . lens _newManager (\s x -> s { _newManager = x })  -- | @since 1.16 class HasEvaluateSettings s where-  evaluateSettings-    :: (Functor f)-    => LensLike' f s EvaluateSettings+  evaluateSettings :: Lens' s EvaluateSettings  instance HasEvaluateSettings InputSettings where-  evaluateSettings k s =-    fmap (\x -> s { _evaluateSettings = x }) (k (_evaluateSettings s))+  evaluateSettings =+    lens _evaluateSettings (\s x -> s { _evaluateSettings = x })  instance HasEvaluateSettings EvaluateSettings where   evaluateSettings = id@@ -278,9 +263,9 @@     let EvaluateSettings{..} = _evaluateSettings      let transform =-               Lens.Family.set Dhall.Import.substitutions   _substitutions-            .  Lens.Family.set Dhall.Import.normalizer      _normalizer-            .  Lens.Family.set Dhall.Import.startingContext _startingContext+               Lens.set Dhall.Import.substitutions   _substitutions+            .  Lens.set Dhall.Import.normalizer      _normalizer+            .  Lens.set Dhall.Import.startingContext _startingContext      let status = transform (Dhall.Import.emptyStatusWithManager _newManager _rootDirectory) 
src/Dhall/Core.hs view
@@ -87,7 +87,7 @@ import Dhall.Src              (Src (..)) import Dhall.Syntax import Instances.TH.Lift      ()-import Lens.Family            (over)+import Lens.Micro             (over) import Prettyprinter          (Pretty)  import qualified Control.Exception
src/Dhall/DirectoryTree.hs view
@@ -259,7 +259,8 @@ makeType :: Expector (Expr Src Void) makeType = Record . Map.fromList <$> sequenceA     [ makeConstructor "directory" (Decode.auto :: Decoder DirectoryEntry)-    , makeConstructor "file" (Decode.auto :: Decoder FileEntry)+    , makeConstructor "file" (Decode.auto :: Decoder TextFileEntry)+    , makeConstructor "binary-file" (Decode.auto :: Decoder BinaryFileEntry)     ]     where         makeConstructor :: Text -> Decoder b -> Expector (Text, RecordField Src Void)@@ -295,13 +296,16 @@     processEntryWith path entry $ \path' content -> do         Directory.createDirectoryIfMissing allowSeparators path'         processFilesystemEntryList allowSeparators path' content-processFilesystemEntry allowSeparators path (FileEntry entry) = do-    Util.printWarning "`file` is deprecated and will be removed eventually. Please use `text-file` instead."-    processFilesystemEntry allowSeparators path (TextFileEntry entry)-processFilesystemEntry _ path (BinaryFileEntry entry) =-    processEntryWith path entry ByteString.writeFile-processFilesystemEntry _ path (TextFileEntry entry) =-    processEntryWith path entry  Text.IO.writeFile+processFilesystemEntry allowSeparators path (BinaryFileEntry entry) =+    processEntryWith path entry $ \path' content -> do+        when allowSeparators $ do+            Directory.createDirectoryIfMissing True (FilePath.takeDirectory path')+        ByteString.writeFile path' content+processFilesystemEntry allowSeparators path (TextFileEntry entry) =+    processEntryWith path entry $ \path' content -> do+        when allowSeparators $ do+            Directory.createDirectoryIfMissing True (FilePath.takeDirectory path')+        Text.IO.writeFile path' content  -- | A helper function used by 'processFilesystemEntry'. processEntryWith
src/Dhall/DirectoryTree/Types.hs view
@@ -12,9 +12,11 @@  -- | Types used by the implementation of the @to-directory-tree@ subcommand module Dhall.DirectoryTree.Types-    ( FilesystemEntry(..)+    ( FilesystemEntry(DirectoryEntry, BinaryFileEntry, TextFileEntry, FileEntry)     , DirectoryEntry     , FileEntry+    , BinaryFileEntry+    , TextFileEntry     , Entry(..)     , User(..)     , Group(..)@@ -67,16 +69,25 @@ type DirectoryEntry = Entry (Seq FilesystemEntry)  -- | A file in the filesystem.+{-# DEPRECATED FileEntry "`FileEntry` is deprecated and will be removed eventually. Please use `TextFileEntry` instead." #-} type FileEntry = Entry Text +-- | A binary file in the filesystem.+type BinaryFileEntry = Entry ByteString++-- | A text file in the filesystem.+type TextFileEntry = Entry Text+ -- | A filesystem entry. data FilesystemEntry     = DirectoryEntry (Entry (Seq FilesystemEntry))-    | FileEntry (Entry Text)-    | BinaryFileEntry (Entry ByteString)-    | TextFileEntry (Entry Text)+    | BinaryFileEntry BinaryFileEntry+    | TextFileEntry TextFileEntry     deriving (Eq, Generic, Ord, Show) +pattern FileEntry :: Entry Text -> FilesystemEntry+pattern FileEntry entry = TextFileEntry entry+ instance FromDhall FilesystemEntry where     autoWith normalizer = Decoder         { expected = pure $ Var (V "tree" 0)@@ -84,11 +95,9 @@             Make "directory" entry ->                 DirectoryEntry <$> extract (autoWith normalizer) entry             Make "file" entry ->-                FileEntry <$> extract (autoWith normalizer) entry+                TextFileEntry <$> extract (autoWith normalizer) entry             Make "binary-file" entry ->                 BinaryFileEntry <$> extract (autoWith normalizer) entry-            Make "text-file" entry ->-                TextFileEntry <$> extract (autoWith normalizer) entry             expr -> Decode.typeError (expected (Decode.autoWith normalizer :: Decoder FilesystemEntry)) expr         } 
src/Dhall/Eval.hs view
@@ -57,7 +57,7 @@ import Data.List.NonEmpty (NonEmpty (..)) import Data.Sequence      (Seq, ViewL (..), ViewR (..)) import Data.Text          (Text)-import Data.Time          (Day, TimeOfDay(..), TimeZone)+import Data.Time          (Day, TimeOfDay (..), TimeZone) import Data.Void          (Void) import Dhall.Map          (Map) import Dhall.Set          (Set)
src/Dhall/Freeze.hs view
@@ -49,7 +49,8 @@     , Transitivity (..)     , handleMultipleChecksFailed     )-import Lens.Family         (set, view)+import Lens.Micro          (set, transformMOf, transformOf)+import Lens.Micro.Extras   (view) import System.Console.ANSI (hSupportsANSI)  import qualified Control.Exception                  as Exception@@ -58,7 +59,6 @@ import qualified Dhall import qualified Dhall.Core                         as Core import qualified Dhall.Import-import qualified Dhall.Optics import qualified Dhall.Pretty import qualified Dhall.TypeCheck import qualified Dhall.Util                         as Util@@ -433,11 +433,11 @@             | import1 == import2 = Embed import1         simplify expression_ = expression_ -    Dhall.Optics.transformOf Core.subExpressions simplify <$> case intent of+    transformOf Core.subExpressions simplify <$> case intent of         Secure ->-            traverse freezeFunction (Dhall.Optics.transformOf Core.subExpressions uncache expression)+            traverse freezeFunction (transformOf Core.subExpressions uncache expression)         Cache  ->-            Dhall.Optics.transformMOf Core.subExpressions cache expression+            transformMOf Core.subExpressions cache expression  -- https://github.com/dhall-lang/dhall-haskell/issues/2347 toMissing :: Import -> Import
src/Dhall/Import.hs view
@@ -210,7 +210,7 @@     , SourcedException (..)     , Src (..)     )-import Lens.Family.State.Strict (zoom)+import Lens.Micro.Mtl (zoom)  import qualified Codec.CBOR.Write                            as Write import qualified Codec.Serialise
src/Dhall/Import/Headers.hs view
@@ -10,12 +10,7 @@     , toOriginHeaders     ) where -import Control.Applicative-    ( Alternative (..)-#if !MIN_VERSION_base(4,18,0)-    , liftA2-#endif-    )+import Control.Applicative (Alternative (..), liftA2) import Control.Exception   (SomeException) import Control.Monad.Catch (handle, throwM) import Data.Text           (Text)
src/Dhall/Import/Types.hs view
@@ -23,7 +23,7 @@     ) import Dhall.Map                        (Map) import Dhall.Parser                     (Src)-import Lens.Family                      (LensLike')+import Lens.Micro                       (Lens', lens) import Prettyprinter                    (Pretty (..))  #ifdef WITH_HTTP@@ -164,45 +164,40 @@     _cacheWarning = CacheNotWarned  -- | Lens from a `Status` to its `_stack` field-stack :: Functor f => LensLike' f Status (NonEmpty Chained)-stack k s = fmap (\x -> s { _stack = x }) (k (_stack s))+stack :: Lens' Status (NonEmpty Chained)+stack = lens _stack (\s x -> s { _stack = x })  -- | Lens from a `Status` to its `_graph` field-graph :: Functor f => LensLike' f Status [Depends]-graph k s = fmap (\x -> s { _graph = x }) (k (_graph s))+graph :: Lens' Status [Depends]+graph = lens _graph (\s x -> s { _graph = x })  -- | Lens from a `Status` to its `_cache` field-cache :: Functor f => LensLike' f Status (Map Chained ImportSemantics)-cache k s = fmap (\x -> s { _cache = x }) (k (_cache s))+cache :: Lens' Status (Map Chained ImportSemantics)+cache = lens _cache (\s x -> s { _cache = x })  -- | Lens from a `Status` to its `_remote` field-remote-    :: Functor f-    => LensLike' f Status (URL -> StateT Status IO Data.Text.Text)-remote k s = fmap (\x -> s { _remote = x }) (k (_remote s))+remote :: Lens' Status (URL -> StateT Status IO Data.Text.Text)+remote = lens _remote (\s x -> s { _remote = x })  -- | Lens from a `Status` to its `_remote` field-remoteBytes-    :: Functor f-    => LensLike' f Status (URL -> StateT Status IO Data.ByteString.ByteString)-remoteBytes k s = fmap (\x -> s { _remoteBytes = x }) (k (_remoteBytes s))+remoteBytes :: Lens' Status (URL -> StateT Status IO Data.ByteString.ByteString)+remoteBytes = lens _remoteBytes (\s x -> s { _remoteBytes = x })  -- | Lens from a `Status` to its `_substitutions` field-substitutions :: Functor f => LensLike' f Status (Dhall.Substitution.Substitutions Src Void)-substitutions k s = fmap (\x -> s { _substitutions = x }) (k (_substitutions s))+substitutions :: Lens' Status (Dhall.Substitution.Substitutions Src Void)+substitutions = lens _substitutions (\s x -> s { _substitutions = x })  -- | Lens from a `Status` to its `_normalizer` field-normalizer :: Functor f => LensLike' f Status (Maybe (ReifiedNormalizer Void))-normalizer k s = fmap (\x -> s {_normalizer = x}) (k (_normalizer s))+normalizer :: Lens' Status (Maybe (ReifiedNormalizer Void))+normalizer = lens _normalizer (\s x -> s {_normalizer = x})  -- | Lens from a `Status` to its `_startingContext` field-startingContext :: Functor f => LensLike' f Status (Context (Expr Src Void))-startingContext k s =-    fmap (\x -> s { _startingContext = x }) (k (_startingContext s))+startingContext :: Lens' Status (Context (Expr Src Void))+startingContext = lens _startingContext (\s x -> s { _startingContext = x })  -- | Lens from a `Status` to its `_cacheWarning` field-cacheWarning :: Functor f => LensLike' f Status CacheWarning-cacheWarning k s = fmap (\x -> s { _cacheWarning = x }) (k (_cacheWarning s))+cacheWarning :: Lens' Status CacheWarning+cacheWarning = lens _cacheWarning (\s x -> s { _cacheWarning = x })  {-| This exception indicates that there was an internal error in Dhall's     import-related logic
src/Dhall/Lint.hs view
@@ -40,8 +40,7 @@ import qualified Data.Text          as Text import qualified Dhall.Core         as Core import qualified Dhall.Map-import qualified Dhall.Optics-import qualified Lens.Family+import qualified Lens.Micro         as Lens  {-| Automatically improve a Dhall expression @@ -53,7 +52,7 @@     * fixes paths of the form @.\/..\/foo@ to @..\/foo@ -} lint :: Eq s => Expr s Import -> Expr s Import-lint =  Dhall.Optics.rewriteOf subExpressions rewrite+lint =  Lens.rewriteOf subExpressions rewrite   where     rewrite e =             fixAssert                e@@ -144,7 +143,7 @@  isOrContainsAssert :: Expr s a -> Bool isOrContainsAssert (Assert _) = True-isOrContainsAssert e = Lens.Family.anyOf subExpressions isOrContainsAssert e+isOrContainsAssert e = Lens.anyOf subExpressions isOrContainsAssert e  -- | The difference between --
src/Dhall/Main.hs view
@@ -27,6 +27,7 @@ import Data.Foldable       (for_) import Data.List.NonEmpty  (NonEmpty (..), nonEmpty) import Data.Maybe          (fromMaybe)+import Data.Monoid         (Endo (..)) import Data.Text           (Text) import Data.Void           (Void) import Dhall.Freeze        (Intent (..), Scope (..))@@ -36,7 +37,7 @@     , SemanticCacheMode (..)     , _semanticCacheMode     )-import Dhall.Package       (writePackage)+import Dhall.Package       (PackagingMode (..), writePackage) import Dhall.Parser        (Src) import Dhall.Pretty     ( Ann@@ -47,6 +48,7 @@ import Dhall.Schemas       (Schemas (..)) import Dhall.TypeCheck     (Censored (..), DetailedTypeError (..), TypeError) import Dhall.Version       (dhallVersionString)+import Lens.Micro          (set) import Options.Applicative (Parser, ParserInfo) import Prettyprinter       (Doc, Pretty) import System.Exit         (ExitCode, exitFailure)@@ -95,6 +97,7 @@ import qualified Dhall.Import.Types import qualified Dhall.Lint import qualified Dhall.Map+import qualified Dhall.Package import qualified Dhall.Pretty import qualified Dhall.Repl import qualified Dhall.Schemas@@ -163,7 +166,10 @@     | DirectoryTree { allowSeparators :: Bool, file :: Input, path :: FilePath }     | Schemas { file :: Input, outputMode :: OutputMode, schemas :: Text }     | SyntaxTree { file :: Input, noted :: Bool }-    | Package { name :: Maybe String, files :: NonEmpty FilePath }+    | Package+        { packageOptions :: Endo Dhall.Package.Options+        , packageFiles :: NonEmpty FilePath+        }  -- | This specifies how to resolve transitive dependencies data ResolveMode@@ -316,7 +322,7 @@             Miscellaneous             "package"             "Create a package.dhall referencing the provided paths"-            (Package <$> parsePackageName <*> parsePackageFiles)+            (Package <$> parsePackageOptions <*> parsePackageFiles)     <|> subcommand             Miscellaneous             "tags"@@ -566,14 +572,25 @@             <>  Options.Applicative.help "Cache the hashed expression"             ) -    parsePackageName = optional $-        Options.Applicative.strOption-            (   Options.Applicative.long "name"-            <>  Options.Applicative.help "The filename of the package"-            <>  Options.Applicative.metavar "NAME"-            <>  Options.Applicative.action "file"+    parsePackageOptions :: Parser (Endo Dhall.Package.Options)+    parsePackageOptions = do+        packageMode <- (optional . Options.Applicative.flag' RecursiveSubpackages)+            ( Options.Applicative.short 'r'+            <> Options.Applicative.long "recursive"+            <> Options.Applicative.help "Create packages for all subdirectories first."             ) +        packageFileName <- (optional . Options.Applicative.strOption)+                (   Options.Applicative.long "name"+                <>  Options.Applicative.help "The filename of the package"+                <>  Options.Applicative.metavar "NAME"+                <>  Options.Applicative.action "file"+                )++        pure $+            maybe mempty (Endo . set Dhall.Package.packagingMode) packageMode <>+            maybe mempty (Endo . set Dhall.Package.packageFileName) packageFileName+     parsePackageFiles = (:|) <$> p <*> Options.Applicative.many p       where         p = Options.Applicative.strArgument@@ -1041,7 +1058,12 @@                     denoted = Dhall.Core.denote expression                 in Text.Pretty.Simple.pPrintNoColor denoted -        Package {..} -> writePackage (fromMaybe Unicode chosenCharacterSet) name files+        Package {..} -> do+            let options = appEndo+                    (maybe mempty (Endo . set Dhall.Package.characterSet) chosenCharacterSet+                    <> packageOptions+                    ) Dhall.Package.defaultOptions+            writePackage options packageFiles  -- | Entry point for the @dhall@ executable main :: IO ()
src/Dhall/Map.hs view
@@ -1,9 +1,11 @@-{-# LANGUAGE DeriveAnyClass     #-}-{-# LANGUAGE DeriveDataTypeable #-}-{-# LANGUAGE DeriveGeneric      #-}-{-# LANGUAGE DeriveLift         #-}-{-# LANGUAGE ExplicitForAll     #-}-{-# LANGUAGE TypeFamilies       #-}+{-# LANGUAGE DeriveAnyClass        #-}+{-# LANGUAGE DeriveDataTypeable    #-}+{-# LANGUAGE DeriveGeneric         #-}+{-# LANGUAGE DeriveLift            #-}+{-# LANGUAGE ExplicitForAll        #-}+{-# LANGUAGE FlexibleInstances     #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE TypeFamilies          #-}  -- | `Map` type used to represent records and unions @@ -76,9 +78,12 @@ import Language.Haskell.TH.Syntax (Lift) import Prelude                    hiding (filter, lookup) +import qualified Data.Foldable.WithIndex    as Foldable.WithIndex+import qualified Data.Functor.WithIndex     as Functor.WithIndex import qualified Data.List import qualified Data.Map.Strict import qualified Data.Set+import qualified Data.Traversable.WithIndex as Traversable.WithIndex import qualified GHC.Exts import qualified Prelude @@ -157,6 +162,18 @@     fromList = Dhall.Map.fromList      toList = Dhall.Map.toList++instance Ord k => Foldable.WithIndex.FoldableWithIndex k (Map k) where+    ifoldMap = foldMapWithKey+    {-# INLINABLE ifoldMap #-}++instance Functor.WithIndex.FunctorWithIndex k (Map k) where+    imap = mapWithKey+    {-# INLINABLE imap #-}++instance Ord k => Traversable.WithIndex.TraversableWithIndex k (Map k) where+    itraverse = traverseWithKey+    {-# INLINABLE itraverse #-}  -- | Create an empty `Map` empty :: Ord k => Map k v
src/Dhall/Marshal/Decode.hs view
@@ -1,6 +1,6 @@ {-# LANGUAGE ApplicativeDo              #-}-{-# LANGUAGE ConstraintKinds            #-} {-# LANGUAGE CPP                        #-}+{-# LANGUAGE ConstraintKinds            #-} {-# LANGUAGE DefaultSignatures          #-} {-# LANGUAGE DeriveFunctor              #-} {-# LANGUAGE DerivingStrategies         #-}@@ -136,12 +136,7 @@     ) where  -import Control.Applicative-    ( empty-#if !MIN_VERSION_base(4,18,0)-    , liftA2-#endif-    )+import Control.Applicative              (empty, liftA2) import Control.Exception                (Exception) import Control.Monad                    (guard) import Control.Monad.Trans.State.Strict@@ -180,9 +175,9 @@ import qualified Data.Foldable import qualified Data.Functor.Compose import qualified Data.Functor.Product-import qualified Data.HashMap.Strict  as HashMap+import qualified Data.HashMap.Strict   as HashMap import qualified Data.HashSet-import qualified Data.List            as List+import qualified Data.List             as List import qualified Data.List.NonEmpty import qualified Data.Map import qualified Data.Maybe@@ -192,9 +187,9 @@ import qualified Data.Text import qualified Data.Text.Lazy import qualified Data.Text.Short-import qualified Data.Time            as Time+import qualified Data.Time             as Time import qualified Data.Vector-import qualified Dhall.Core           as Core+import qualified Dhall.Core            as Core import qualified Dhall.Map import qualified Dhall.Util 
src/Dhall/Marshal/Encode.hs view
@@ -78,7 +78,7 @@ import qualified Data.ByteString.Lazy import qualified Data.ByteString.Short import qualified Data.Functor.Product-import qualified Data.HashMap.Strict  as HashMap+import qualified Data.HashMap.Strict   as HashMap import qualified Data.HashSet import qualified Data.Map import qualified Data.Scientific@@ -87,10 +87,10 @@ import qualified Data.Text import qualified Data.Text.Lazy import qualified Data.Text.Short-import qualified Data.Time            as Time+import qualified Data.Time             as Time import qualified Data.Vector import qualified Data.Void-import qualified Dhall.Core           as Core+import qualified Dhall.Core            as Core import qualified Dhall.Map  import Dhall.Marshal.Internal
src/Dhall/Normalize.hs view
@@ -48,7 +48,7 @@ import qualified Dhall.Eval    as Eval import qualified Dhall.Map import qualified Dhall.Syntax  as Syntax-import qualified Lens.Family   as Lens+import qualified Lens.Micro    as Lens  {-| Returns `True` if two expressions are α-equivalent and β-equivalent and     `False` otherwise
src/Dhall/Optics.hs view
@@ -3,10 +3,13 @@     for convenience -} -module Dhall.Optics+{-# LANGUAGE RankNTypes #-}++module Dhall.Optics {-# DEPRECATED "Use the definitions from Lens.Micro of the microlens package directly." #-}     ( Optic     , Optic'        -- * Utilities+    , anyOf     , rewriteOf     , transformOf     , rewriteMOf@@ -18,65 +21,63 @@     ) where  import Control.Applicative        (Const (..), WrappedMonad (..))-import Data.Functor.Contravariant (Contravariant (contramap))-import Data.Profunctor            (Profunctor (dimap))-import Data.Profunctor.Unsafe     ((#.))-import Lens.Family                (ASetter, LensLike, LensLike', over)+import Data.Monoid                (Any (..))+import Lens.Micro                 (ASetter, LensLike, Traversal, SimpleGetter)+import Lens.Micro.Internal        ((#.)) +import qualified Lens.Micro++-- | Identical to @"Control.Lens.Getter".`Control.Lens.Getter.Getting`@+type Getting r s a = (a -> Const r a) -> s -> Const r s++-- | Identical to @"Control.Lens.Type".`Control.Lens.Type.Optic`@+type Optic p f s t a b = p a (f b) -> p s (f t)++-- | Identical to @"Control.Lens.Type".`Control.Lens.Type.Optic'`@+type Optic' p f s a = Optic p f s s a a++-- | Identical to @"Control.Lens".`Control.Lens.anyOf`@+anyOf :: Getting Any s a -> (a -> Bool) -> s -> Bool+anyOf = Lens.Micro.anyOf+{-# INLINE anyOf #-}+ -- | Identical to @"Control.Lens".`Control.Lens.rewriteOf`@ rewriteOf :: ASetter a b a b -> (b -> Maybe a) -> a -> b-rewriteOf l f = go-  where-    go = transformOf l (\x -> maybe x go (f x))+rewriteOf = Lens.Micro.rewriteOf {-# INLINE rewriteOf #-}  -- | Identical to @"Control.Lens".`Control.Lens.transformOf`@ transformOf :: ASetter a b a b -> (b -> b) -> a -> b-transformOf l f = go-  where-    go = f . over l go+transformOf = Lens.Micro.transformOf {-# INLINE transformOf #-}  -- | Identical to @"Control.Lens".`Control.Lens.rewriteMOf`@ rewriteMOf     :: Monad m     => LensLike (WrappedMonad m) a b a b -> (b -> m (Maybe a)) -> a -> m b-rewriteMOf l f = go-  where-    go = transformMOf l (\x -> f x >>= maybe (return x) go)+rewriteMOf = Lens.Micro.rewriteMOf {-# INLINE rewriteMOf #-}  -- | Identical to @"Control.Lens".`Control.Lens.transformMOf`@ transformMOf     :: Monad m => LensLike (WrappedMonad m) a b a b -> (b -> m b) -> a -> m b-transformMOf l f = go-  where-    go t = mapMOf l go t >>= f+transformMOf = Lens.Micro.transformMOf {-# INLINE transformMOf #-}  -- | Identical to @"Control.Lens".`Control.Lens.mapMOf`@ mapMOf :: LensLike (WrappedMonad m) s t a b -> (a -> m b) -> s -> m t-mapMOf l cmd = unwrapMonad #. l (WrapMonad #. cmd)+mapMOf = Lens.Micro.mapMOf {-# INLINE mapMOf #-}  -- | Identical to @"Control.Lens.Plated".`Control.Lens.Plated.cosmosOf`@-cosmosOf :: (Applicative f, Contravariant f) => LensLike' f a a -> LensLike' f a a-cosmosOf d f s = f s *> d (cosmosOf d f) s+cosmosOf :: Traversal s t s t -> Traversal s t s b+cosmosOf = Lens.Micro.cosmosOf {-# INLINE cosmosOf #-} --- | Identical to @"Control.Lens.Type".`Control.Lens.Type.Optic`@-type Optic p f s t a b = p a (f b) -> p s (f t)---- | Identical to @"Control.Lens.Type".`Control.Lens.Type.Optic'`@-type Optic' p f s a = Optic p f s s a a- -- | Identical to @"Control.Lens.Getter".`Control.Lens.Getter.to`@-to :: (Profunctor p, Contravariant f) => (s -> a) -> Optic' p f s a-to k = dimap k (contramap k)+to :: (s -> a) -> SimpleGetter s a+to = Lens.Micro.to {-# INLINE to #-}---- | Identical to @"Control.Lens.Getter".`Control.Lens.Getter.Getting`@-type Getting r s a = (a -> Const r a) -> s -> Const r s  -- | Identical to @"Control.Lens.Fold".`Control.Lens.Fold.foldOf`@ foldOf :: Getting a s a -> s -> a
src/Dhall/Package.hs view
@@ -5,7 +5,13 @@ -- | Create a package.dhall from files and directory contents.  module Dhall.Package-    ( writePackage+    ( Options+    , defaultOptions+    , characterSet+    , packageFileName+    , packagingMode+    , PackagingMode(..)+    , writePackage     , getPackagePathAndContent     , PackageError(..)     ) where@@ -13,7 +19,6 @@ import           Control.Exception  (Exception, throwIO) import           Control.Monad import           Data.List.NonEmpty (NonEmpty (..))-import           Data.Maybe         (fromMaybe) import           Data.Text          (Text) import qualified Data.Text          as Text import           Data.Traversable   (for)@@ -34,16 +39,59 @@ import           Dhall.Pretty       (CharacterSet (..)) import qualified Dhall.Pretty import           Dhall.Util         (_ERROR, renderExpression)+import           Lens.Micro         (Lens', lens) import           System.Directory import           System.FilePath +-- | Options for package creation.+data Options = Options+    { optionsCharacterSet :: CharacterSet+    , optionsPackageFileName :: String+    , optionsPackagingMode :: PackagingMode+    }++-- | The default options used for packaging.+--+-- The default values for the different settings are:+--+--  * The character set used is the one given by 'Dhall.Pretty.defaultCharacterSet'.+--  * The package file name is @package.dhall@.+--  * The packaging mode is 'OnlyThisPackage'.+defaultOptions :: Options+defaultOptions = Options+    { optionsCharacterSet = Dhall.Pretty.defaultCharacterSet+    , optionsPackageFileName = "package.dhall"+    , optionsPackagingMode = OnlyThisPackage+    }++-- | Access the character set used to render the package content.+characterSet :: Lens' Options CharacterSet+characterSet = lens optionsCharacterSet (\s x -> s { optionsCharacterSet = x })++-- | Access the file name used for the package file.+packageFileName :: Lens' Options String+packageFileName =+    lens optionsPackageFileName (\s x -> s { optionsPackageFileName = x })++-- | Access the packaging mode.+-- See the documentation of 'getPackagePathAndContent'.+packagingMode :: Lens' Options PackagingMode+packagingMode =+    lens optionsPackagingMode (\s x -> s { optionsPackagingMode = x })++-- | Whether to recursively create a package for each subdirectory or not.+-- See the documentation of 'getPackagePathAndContent'.+data PackagingMode+    = OnlyThisPackage+    | RecursiveSubpackages+ -- | Create a package.dhall from files and directory contents. -- For a description of how the package file is constructed see -- 'getPackagePathAndContent'.-writePackage :: CharacterSet -> Maybe String -> NonEmpty FilePath -> IO ()-writePackage characterSet outputFn inputs = do-    (outputPath, expr) <- getPackagePathAndContent outputFn inputs-    renderExpression characterSet True (Just outputPath) expr+writePackage :: Options -> NonEmpty FilePath -> IO ()+writePackage options inputs = do+    (outputPath, expr) <- getPackagePathAndContent options inputs+    renderExpression (optionsCharacterSet options) True (Just outputPath) expr  -- | Get the path and the Dhall expression for a package file. --@@ -62,11 +110,18 @@ --   * If the path points to a directory, all files with a @.dhall@ extensions --     in that directory are included in the package. --+--     If you passed `Recurse` to the this function, then in addition to these+--     files all subdirectories are traversed and a sub-package created for each+--     one. That sub-package will be included in the package too.+-- --   * If the path points to a regular file, it is included in the package --     unless it is the path of the package file itself. ---getPackagePathAndContent :: Maybe String -> NonEmpty FilePath -> IO (FilePath, Expr s Import)-getPackagePathAndContent outputFn (path :| paths) = do+getPackagePathAndContent+    :: Options+    -> NonEmpty FilePath+    -> IO (FilePath, Expr s Import)+getPackagePathAndContent options (path :| paths) = do     outputDir <- do         isDirectory <- doesDirectoryExist path         return $ if isDirectory then path else takeDirectory path@@ -82,9 +137,13 @@             return relativeDir      resultMap <- go Map.empty checkOutputDir (path:paths)-    return (outputDir </> outputFn', RecordLit $ Map.sort resultMap)+    return (outputDir </> outputFn, RecordLit $ Map.sort resultMap)     where-        go :: Map Text (RecordField s Import) -> (FilePath -> IO FilePath) -> [FilePath] -> IO (Map Text (RecordField s Import))+        go+            :: Map Text (RecordField s Import)+            -> (FilePath -> IO FilePath)+            -> [FilePath]+            -> IO (Map Text (RecordField s Import))         go !acc _checkOutputDir [] = return acc         go !acc checkOutputDir (p:ps) = do             isDirectory <- doesDirectoryExist p@@ -92,22 +151,41 @@             if | isDirectory -> do                     void $ checkOutputDir p                     entries <- listDirectory p-                    let entries' = filter (\entry -> takeExtension entry == ".dhall") entries-                    go acc checkOutputDir (map (p </>) entries' <> ps)+                    (dhallFiles, subdirectories) <- foldMap+                        ( \entry -> do+                            let entry' = p </> entry+                            isDirectoryEntry <- doesDirectoryExist entry'+                            return $ if isDirectoryEntry+                                then (mempty, [entry'])+                                else if hasDhallExtension entry+                                    then ([entry'], mempty)+                                    else mempty+                        ) entries+                    subpackages <- case optionsPackagingMode options of+                        RecursiveSubpackages ->+                            for subdirectories $ \subdirectory -> do+                                writePackage options (subdirectory :| [])+                                return (subdirectory </> outputFn)+                        OnlyThisPackage -> return []+                    go acc checkOutputDir (dhallFiles <> subpackages <> ps)                | isFile -> do                     dir <- checkOutputDir $ takeDirectory p                      let p' = normalise $ dir </> takeFileName p -                    let resultMap = if p' == outputFn'+                    let resultMap = if p' == outputFn                             then Map.empty-                            else filepathToMap outputFn' p'+                            else filepathToMap outputFn p'                      acc' <- mergeMaps acc resultMap                     go acc' checkOutputDir ps                 | otherwise -> throwIO $ InvalidPath p -        outputFn' = fromMaybe "package.dhall" outputFn+        hasDhallExtension :: FilePath -> Bool+        hasDhallExtension entry = takeExtension entry == ".dhall"++        outputFn :: String+        outputFn = optionsPackageFileName options  -- | Construct a nested 'Map' from a 'FilePath'. -- For example, the filepath @some/file/path.dhall@ will result in something
src/Dhall/Parser/Combinators.hs view
@@ -23,12 +23,7 @@     ) where  -import Control.Applicative-    ( Alternative (..)-#if !MIN_VERSION_base(4,18,0)-    , liftA2-#endif-    )+import Control.Applicative     (Alternative (..), liftA2) import Control.Exception       (Exception) import Control.Monad           (MonadPlus (..)) import Data.String             (IsString (..))
src/Dhall/Parser/Expression.hs view
@@ -8,13 +8,7 @@ -- | Parsing Dhall expressions. module Dhall.Parser.Expression where -import Control.Applicative-    ( Alternative (..)-#if !MIN_VERSION_base(4,18,0)-    , liftA2-#endif-    , optional-    )+import Control.Applicative     (Alternative (..), liftA2, optional) import Data.Foldable           (foldl') import Data.List.NonEmpty      (NonEmpty (..)) import Data.Text               (Text)
src/Dhall/Pretty.hs view
@@ -8,6 +8,7 @@     , prettyExpr      , CharacterSet(..)+    , defaultCharacterSet     , detectCharacterSet     , prettyCharacterSet 
src/Dhall/Pretty/Internal.hs view
@@ -20,6 +20,7 @@     , prettySrcExpr      , CharacterSet(..)+    , defaultCharacterSet     , detectCharacterSet     , prettyCharacterSet     , prettyImportExpression@@ -86,12 +87,12 @@ import                Data.List.NonEmpty            (NonEmpty (..)) import                Data.Text                     (Text) import                Dhall.Map                     (Map)-import                Dhall.Optics                  (cosmosOf, foldOf, to) import                Dhall.Src                     (Src (..)) import                Dhall.Syntax import {-# SOURCE #-} Dhall.Syntax.Instances.Pretty () import                GHC.Generics                  (Generic) import                Language.Haskell.TH.Syntax    (Lift)+import                Lens.Micro                    (cosmosOf, foldMapOf) import                Numeric.Natural               (Natural) import                Prettyprinter                 (Doc, Pretty, space) @@ -155,11 +156,16 @@   parseJSON v@(String _) = unexpected v   parseJSON v = typeMismatch "String" v +-- | The character set used by default in functions throughout the Dhall code+-- base.+defaultCharacterSet :: CharacterSet+defaultCharacterSet = Unicode+ -- | Detect which character set is used for the syntax of an expression -- If any parts of the expression uses the Unicode syntax, the whole expression -- is deemed to be using the Unicode syntax. detectCharacterSet :: Expr Src a -> CharacterSet-detectCharacterSet = foldOf (cosmosOf subExpressions . to exprToCharacterSet)+detectCharacterSet = foldMapOf (cosmosOf subExpressions) exprToCharacterSet   where     exprToCharacterSet = \case         Embed _ -> mempty -- Don't go down the embed route, otherwise: <<loop>>@@ -176,7 +182,7 @@ prettyExpr = prettySrcExpr . denote  prettySrcExpr :: Pretty a => Expr Src a -> Doc Ann-prettySrcExpr = prettyCharacterSet Unicode+prettySrcExpr = prettyCharacterSet defaultCharacterSet  {-| Internal utility for pretty-printing, used when generating element lists     to supply to `enclose` or `enclose'`.  This utility indicates that the
src/Dhall/Schemas.hs view
@@ -41,13 +41,13 @@ import qualified Dhall.Import                       as Import import qualified Dhall.Map                          as Map import qualified Dhall.Normalize                    as Normalize-import qualified Dhall.Optics                       as Optics import qualified Dhall.Parser                       as Parser import qualified Dhall.Pretty import qualified Dhall.Substitution                 as Substitution import qualified Dhall.Syntax                       as Syntax import qualified Dhall.TypeCheck                    as TypeCheck import qualified Dhall.Util                         as Util+import qualified Lens.Micro                         as Lens import qualified Prettyprinter                      as Pretty import qualified Prettyprinter.Render.Terminal      as Pretty.Terminal import qualified Prettyprinter.Render.Text          as Pretty.Text@@ -195,7 +195,7 @@      let rewrittenExpression :: Expr Src Import         rewrittenExpression =-            fmap Void.absurd (Optics.transformOf Syntax.subExpressions schemasRewrite normalizedExpression)+            fmap Void.absurd (Lens.transformOf Syntax.subExpressions schemasRewrite normalizedExpression)      if Normalize.freeIn (V "schemas" 0) rewrittenExpression         then return (Let (Syntax.makeBinding "schemas" _schemas) rewrittenExpression)
src/Dhall/Syntax/Expr.hs view
@@ -1,4 +1,4 @@-{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE DeriveGeneric            #-} {-# LANGUAGE StandaloneKindSignatures #-}  module Dhall.Syntax.Expr
src/Dhall/Syntax/Instances/Applicative.hs view
@@ -9,7 +9,7 @@ import Dhall.Syntax.Operations import Dhall.Syntax.RecordField -import qualified Lens.Family as Lens+import qualified Lens.Micro as Lens  instance Applicative (Expr s) where     pure = Embed
src/Dhall/Syntax/Instances/Bifunctor.hs view
@@ -10,7 +10,7 @@ import Dhall.Syntax.Operations import Dhall.Syntax.RecordField -import qualified Lens.Family as Lens+import qualified Lens.Micro as Lens  instance Bifunctor Binding where     first k (Binding src0 a src1 b src2 c) =
src/Dhall/Syntax/Instances/Functor.hs view
@@ -13,7 +13,7 @@ import                Dhall.Syntax.RecordField import                Dhall.Syntax.Types -import qualified Lens.Family as Lens+import qualified Lens.Micro as Lens  deriving instance Functor (Binding s) deriving instance Functor (Chunks s)
src/Dhall/Syntax/Instances/Lift.hs view
@@ -19,9 +19,11 @@ #if !MIN_VERSION_template_haskell(2,21,0) import qualified Data.Fixed as Fixed #endif-import qualified Data.Time  as Time+import qualified Data.Time as Time +#if !MIN_VERSION_time(1,14,0) deriving instance Lift Time.Day+#endif deriving instance Lift Time.TimeOfDay deriving instance Lift Time.TimeZone #if !MIN_VERSION_template_haskell(2,21,0)
src/Dhall/Syntax/Instances/Monad.hs view
@@ -9,7 +9,7 @@ import Dhall.Syntax.Operations import Dhall.Syntax.RecordField -import qualified Lens.Family as Lens+import qualified Lens.Micro as Lens  instance Monad (Expr s) where     return = pure
src/Dhall/Syntax/Operations.hs view
@@ -38,7 +38,7 @@  import qualified Data.HashSet import qualified Data.Text-import qualified Lens.Family  as Lens+import qualified Lens.Micro   as Lens   -- | A traversal over the immediate sub-expressions of an expression.
src/Dhall/TH.hs view
@@ -27,7 +27,7 @@ import Dhall.Syntax              (Expr (..), FunctionBinding (..), Var (..)) import GHC.Generics              (Generic) import Language.Haskell.TH.Quote (QuasiQuoter (..), dataToExpQ)-import Lens.Family               (view)+import Lens.Micro.Extras         (view) import Prettyprinter             (Pretty)  import Language.Haskell.TH.Syntax
src/Dhall/TypeCheck.hs view
@@ -47,9 +47,9 @@     , Val (..)     , (~>)     )-import Dhall.Pretty                      (Ann, UnescapedLabel(..))+import Dhall.Pretty                      (Ann, UnescapedLabel (..)) import Dhall.Src                         (Src)-import Lens.Family                       (over)+import Lens.Micro                        (anyOf, over) import Prettyprinter                     (Doc, Pretty (..), vsep)  import Dhall.Syntax@@ -81,7 +81,6 @@ import qualified Dhall.Pretty.Internal import qualified Dhall.Syntax                as Syntax import qualified Dhall.Util-import qualified Lens.Family import qualified Prettyprinter               as Pretty import qualified Prettyprinter.Render.String as Pretty @@ -1004,7 +1003,7 @@                                             n < 0                                          containsBadVar e =-                                            Lens.Family.anyOf+                                            anyOf                                                 Dhall.Core.subExpressions                                                 containsBadVar                                                 e@@ -1315,12 +1314,21 @@                    VOptional _O' -> do                     case ks of-                      WithQuestion  :| _ -> do++                        -- (Some x) with ? = v is valid iff the type of x is the same as the type of v.+                      WithQuestion :| [] -> do                         tV' <- loop ctx v                         if Eval.conv values _O' tV'                           then return (VOptional _O')                           else die OptionalWithTypeMismatch +                        -- (Some x) with ?.a.b = v is valid iff the type of x.a.b is the same as the type of v.+                      WithQuestion :| k₁ : ks' -> do+                        tV' <- with _O' (k₁ :| ks') v+                        if Eval.conv values _O' tV'+                          then return (VOptional _O')+                          else die OptionalWithTypeMismatch+                       WithLabel k :| _ -> die (NotAQuestionPath k)                    _ -> die (NotWithARecord e₀ (quote names tE')) -- TODO: NotWithARecordOrOptional@@ -1370,7 +1378,6 @@     | Untyped     | MissingListType     | MismatchedListElements Int (Expr s a) (Expr s a) (Expr s a)-    | InvalidListElement Int (Expr s a) (Expr s a) (Expr s a)     | InvalidListType (Expr s a)     | ListLitInvariant     | InvalidSome (Expr s a) (Expr s a) (Expr s a)@@ -1379,13 +1386,11 @@     | InvalidFieldType Text (Expr s a)     | InvalidAlternativeType Text (Expr s a)     | ListAppendMismatch (Expr s a) (Expr s a)-    | MustUpdateARecord (Expr s a) (Expr s a) (Expr s a)     | MustCombineARecord Char (Expr s a) (Expr s a)     | InvalidDuplicateField Text (Expr s a) (Expr s a)     | InvalidRecordCompletion Text (Expr s a)     | CompletionSchemaMustBeARecord (Expr s a) (Expr s a)     | CombineTypesRequiresRecordType (Expr s a) (Expr s a)-    | RecordTypeMismatch Const Const (Expr s a) (Expr s a)     | DuplicateFieldCannotBeMerged (NonEmpty Text)     | FieldCollision (NonEmpty Text)     | FieldTypeCollision (NonEmpty Text)@@ -1402,7 +1407,6 @@     | HandlerInputTypeMismatch Text (Expr s a) (Expr s a)     | DisallowedHandlerType Text (Expr s a) (Expr s a) Text     | HandlerOutputTypeMismatch Text (Expr s a) Text (Expr s a)-    | InvalidHandlerOutputType Text (Expr s a) (Expr s a)     | MissingMergeType     | HandlerNotAFunction Text (Expr s a)     | CantAccess Text (Expr s a) (Expr s a)@@ -2452,47 +2456,6 @@         txt1 = pretty i         txt3 = insert expr2 -prettyTypeMessage (InvalidListElement i expr0 _expr1 expr2) =-    ErrorMessages {..}-  where-    short = "List element has the wrong type\n"-        <>  "\n"-        <>  Dhall.Diff.doc (Dhall.Diff.diffNormalized expr0 expr2)--    hints = []--    long =-        "Explanation: Every element in the list must have a type matching the type       \n\-        \annotation at the end of the list                                               \n\-        \                                                                                \n\-        \For example, this is a valid ❰List❱:                                            \n\-        \                                                                                \n\-        \                                                                                \n\-        \    ┌──────────────────────────┐                                                \n\-        \    │ [1, 2, 3] : List Natural │  Every element in this ❰List❱ is an ❰Natural❱  \n\-        \    └──────────────────────────┘                                                \n\-        \                                                                                \n\-        \                                                                                \n\-        \.. but this is " <> _NOT <> " a valid ❰List❱:                                   \n\-        \                                                                                \n\-        \                                                                                \n\-        \    ┌──────────────────────────────┐                                            \n\-        \    │ [1, \"ABC\", 3] : List Natural │  The second element is not an ❰Natural❱  \n\-        \    └──────────────────────────────┘                                            \n\-        \                                                                                \n\-        \                                                                                \n\-        \Your ❰List❱ elements should have this type:                                     \n\-        \                                                                                \n\-        \" <> txt0 <> "\n\-        \                                                                                \n\-        \... but the element at index #" <> txt1 <> " has this type instead:             \n\-        \                                                                                \n\-        \" <> txt3 <> "\n"-      where-        txt0 = insert expr0-        txt1 = pretty i-        txt3 = insert expr2- prettyTypeMessage (InvalidSome expr0 expr1 expr2) = ErrorMessages {..}   where     short = "❰Some❱ argument has the wrong type"@@ -2737,57 +2700,6 @@         txt0 = insert expr0         txt1 = pretty fieldName -prettyTypeMessage (MustUpdateARecord withExpression expression typeExpression) =-    ErrorMessages {..}-  where-    short = "You can only update records"--    hints = []--    long =-        "Explanation: You can update records using the ❰with❱ keyword, like this:        \n\-        \                                                                                \n\-        \                                                                                \n\-        \    ┌────────────────────────────────┐                                          \n\-        \    │ { x = { y = 1 } } with x.y = 2 │                                          \n\-        \    └────────────────────────────────┘                                          \n\-        \                                                                                \n\-        \                                                                                \n\-        \    ┌────────────────────────────────────────────────────────────┐              \n\-        \    │ λ(r : { foo : { bar : Bool } }) → r with foo.bar = False } │              \n\-        \    └────────────────────────────────────────────────────────────┘              \n\-        \                                                                                \n\-        \                                                                                \n\-        \... but you cannot update values that are not records.                          \n\-        \                                                                                \n\-        \For example, the following expression is " <> _NOT <> " valid:                  \n\-        \                                                                                \n\-        \                                                                                \n\-        \    ┌─────────────────┐                                                         \n\-        \    │ 1 with x = True │                                                         \n\-        \    └─────────────────┘                                                         \n\-        \      ⇧                                                                         \n\-        \      Invalid: Not a record                                                     \n\-        \                                                                                \n\-        \                                                                                \n\-        \────────────────────────────────────────────────────────────────────────────────\n\-        \                                                                                \n\-        \The following expression is not permitted:                                      \n\-        \                                                                                \n\-        \" <> insert withExpression' <> "\n\-        \                                                                                \n\-        \... because the left argument to ❰with❱:                                        \n\-        \                                                                                \n\-        \" <> insert expression <> "\n\-        \                                                                                \n\-        \... is not a record, but is actually a:                                         \n\-        \                                                                                \n\-        \" <> insert typeExpression <> "\n"-      where-        withExpression' = case withExpression of-            With record keys value -> With (Dhall.Core.normalize record) keys value-            _                      -> withExpression- prettyTypeMessage (MustCombineARecord c expression typeExpression) =     ErrorMessages {..}   where@@ -2960,59 +2872,6 @@         txt0 = insert expr0         txt1 = insert expr1 -prettyTypeMessage (RecordTypeMismatch const0 const1 expr0 expr1) =-    ErrorMessages {..}-  where-    short = "Record type mismatch"--    hints = []--    long =-        "Explanation: You can only use the ❰⩓❱ operator on record types if they are both \n\-        \ ❰Type❱s or ❰Kind❱s:                                                            \n\-        \                                                                                \n\-        \                                                                                \n\-        \    ┌─────────────────────────────────────┐                                     \n\-        \    │ { age : Natural } ⩓ { name : Text } │  Valid: Both arguments are ❰Type❱s  \n\-        \    └─────────────────────────────────────┘                                     \n\-        \                                                                                \n\-        \                                                                                \n\-        \    ┌──────────────────────────────────────┐                                    \n\-        \    │ { Input : Type } ⩓ { Output : Type } │  Valid: Both arguments are ❰Kind❱s \n\-        \    └──────────────────────────────────────┘                                    \n\-        \                                                                                \n\-        \                                                                                \n\-        \... but you cannot combine a ❰Type❱ and a ❰Kind❱:                               \n\-        \                                                                                \n\-        \                                                                                \n\-        \    ┌────────────────────────────────────┐                                      \n\-        \    │ { Input : Type } ⩓ { name : Text } │  Invalid: The arguments do not match \n\-        \    └────────────────────────────────────┘                                      \n\-        \                                                                                \n\-        \                                                                                \n\-        \────────────────────────────────────────────────────────────────────────────────\n\-        \                                                                                \n\-        \You tried to combine the following record type:                                 \n\-        \                                                                                \n\-        \" <> txt0 <> "\n\-        \                                                                                \n\-        \... with this record types:                                                     \n\-        \                                                                                \n\-        \" <> txt1 <> "\n\-        \                                                                                \n\-        \... but the former record type is a:                                            \n\-        \                                                                                \n\-        \" <> txt2 <> "\n\-        \                                                                                \n\-        \... but the latter record type is a:                                            \n\-        \                                                                                \n\-        \" <> txt3 <> "\n"-      where-        txt0 = insert expr0-        txt1 = insert expr1-        txt2 = insert const0-        txt3 = insert const1- prettyTypeMessage (DuplicateFieldCannotBeMerged ks) = ErrorMessages {..}   where     short = "Duplicate field cannot be merged: " <> pretty (toPath ks)@@ -3526,72 +3385,6 @@         \                                                                                \n\         \" <> insert variable <> "\n" -prettyTypeMessage (InvalidHandlerOutputType expr0 expr1 expr2) =-    ErrorMessages {..}-  where-    short = "Wrong handler output type\n"-        <>  "\n"-        <>  Dhall.Diff.doc (Dhall.Diff.diffNormalized expr1 expr2)--    hints = []--    long =-        "Explanation: You can ❰merge❱ the alternatives of a union or an ❰Optional❱ using \n\-        \a record with one handler per alternative, like this:                           \n\-        \                                                                                \n\-        \                                                                                \n\-        \    ┌─────────────────────────────────────────────────────────────────┐         \n\-        \    │ let union    = < Left : Natural | Right : Bool >.Left 2         │         \n\-        \    │ let handlers = { Left = Natural/even, Right = λ(x : Bool) → x } │         \n\-        \    │ in  merge handlers union : Bool                                 │         \n\-        \    └─────────────────────────────────────────────────────────────────┘         \n\-        \                                                                                \n\-        \                                                                                \n\-        \... as long as the output type of each handler function matches the declared    \n\-        \type of the result:                                                             \n\-        \                                                                                \n\-        \                                                                                \n\-        \    ┌───────────────────────────────────────────────────────────┐               \n\-        \    │ handlers : { Left : Natural → Bool, Right : Bool → Bool } │               \n\-        \    └───────────────────────────────────────────────────────────┘               \n\-        \                                    ⇧                    ⇧                      \n\-        \                                    These output types ...                      \n\-        \                                                                                \n\-        \                             ... must match the declared type of the ❰merge❱    \n\-        \                             ⇩                                                  \n\-        \    ┌─────────────────────────────┐                                             \n\-        \    │ merge handlers union : Bool │                                             \n\-        \    └─────────────────────────────┘                                             \n\-        \                                                                                \n\-        \                                                                                \n\-        \For example, the following expression is " <> _NOT <> " valid:                  \n\-        \                                                                                \n\-        \                                                                                \n\-        \    ┌──────────────────────────────────────────────────────────────────┐        \n\-        \    │ let union    = < Left : Natural | Right : Bool >.Left 2          │        \n\-        \    │ let handlers = { Left = Natural/even, Right = λ(x : Bool) → x }  │        \n\-        \    │ in  merge handlers union : Text                                  │        \n\-        \    └──────────────────────────────────────────────────────────────────┘        \n\-        \                                 ⇧                                              \n\-        \                                 Invalid: Doesn't match output of either handler\n\-        \                                                                                \n\-        \                                                                                \n\-        \Your handler for the following alternative:                                     \n\-        \                                                                                \n\-        \" <> txt0 <> "\n\-        \                                                                                \n\-        \... needs to return an output value of type:                                    \n\-        \                                                                                \n\-        \" <> txt1 <> "\n\-        \                                                                                \n\-        \... but actually returns an output value of a different type:                   \n\-        \                                                                                \n\-        \" <> txt2 <> "\n"-      where-        txt0 = insert expr0-        txt1 = insert expr1-        txt2 = insert expr2- prettyTypeMessage (HandlerOutputTypeMismatch key0 expr0 key1 expr1) =     ErrorMessages {..}   where@@ -4873,8 +4666,6 @@         pure MissingListType     MismatchedListElements a b c d ->         MismatchedListElements <$> pure a <*> f b <*> f c <*> f d-    InvalidListElement a b c d ->-        InvalidListElement <$> pure a <*> f b <*> f c <*> f d     InvalidListType a ->         InvalidListType <$> f a     ListLitInvariant ->@@ -4893,8 +4684,6 @@         ListAppendMismatch <$> f a <*> f b     InvalidDuplicateField a b c ->         InvalidDuplicateField a <$> f b <*> f c-    MustUpdateARecord a b c ->-        MustUpdateARecord <$> f a <*> f b <*> f c     MustCombineARecord a b c ->         MustCombineARecord <$> pure a <*> f b <*> f c     InvalidRecordCompletion a l ->@@ -4903,8 +4692,6 @@         CompletionSchemaMustBeARecord <$> f l <*> f r     CombineTypesRequiresRecordType a b ->         CombineTypesRequiresRecordType <$> f a <*> f b-    RecordTypeMismatch a b c d ->-        RecordTypeMismatch <$> pure a <*> pure b <*> f c <*> f d     DuplicateFieldCannotBeMerged a ->         pure (DuplicateFieldCannotBeMerged a)     FieldCollision a ->@@ -4937,8 +4724,6 @@         DisallowedHandlerType <$> pure a <*> f b <*> f c <*> pure d     HandlerOutputTypeMismatch a b c d ->         HandlerOutputTypeMismatch <$> pure a <*> f b <*> pure c <*> f d-    InvalidHandlerOutputType a b c ->-        InvalidHandlerOutputType <$> pure a <*> f b <*> f c     MissingMergeType ->         pure MissingMergeType     HandlerNotAFunction a b ->
tests/Dhall/Test/DirectoryTree.hs view
@@ -1,23 +1,24 @@-{-# LANGUAGE CPP #-}-{-# LANGUAGE OverloadedLists #-}+{-# LANGUAGE CPP               #-}+{-# LANGUAGE OverloadedLists   #-} {-# LANGUAGE OverloadedStrings #-}  module Dhall.Test.DirectoryTree (tests) where  import Control.Monad-import Data.Either (partitionEithers)+import Data.Either            (partitionEithers) import Data.Either.Validation import Dhall.DirectoryTree-import Lens.Family (set)-import System.FilePath ((</>))+import Lens.Micro             (set)+import System.FilePath        ((</>)) import Test.Tasty import Test.Tasty.HUnit +import qualified Data.List import qualified Data.Text.IO import qualified Dhall import qualified Dhall.Core-import qualified System.Directory as Directory-import qualified System.FilePath as FilePath+import qualified System.Directory         as Directory+import qualified System.FilePath          as FilePath import qualified System.PosixCompat.Files as Files  tests :: TestTree@@ -26,6 +27,7 @@         [ fixpointedType         , fixpointedEmpty         , fixpointedSimple+        , fixpointedAllowPathSeparators #ifndef mingw32_HOST_OS         , fixpointedPermissions         , fixpointedUserGroup@@ -54,12 +56,25 @@     let outDir = "./tests/to-directory-tree/fixpoint-simple.out"         path = "./tests/to-directory-tree/fixpoint-simple.dhall"     entries <- runDirectoryTree False outDir path-    entries @?=+    entries @?= Data.List.sort         [ Directory outDir         , File $ outDir </> "file"         , Directory $ outDir </> "directory"         ] +fixpointedAllowPathSeparators :: TestTree+fixpointedAllowPathSeparators = testCase "allow-path-separators" $ do+    let outDir = "./tests/to-directory-tree/fixpoint-allow-path-separators.out"+        path = "./tests/to-directory-tree/fixpoint-allow-path-separators.dhall"+    entries <- runDirectoryTree True outDir path+    entries @?= Data.List.sort+        [ Directory outDir+        , Directory $ outDir </> "non-existent-1"+        , File $ outDir </> "non-existent-1" </> "file"+        , Directory $ outDir </> "non-existent-2"+        , Directory $ outDir </> "non-existent-2" </> "directory"+        ]+ {- This test is disabled on Windows as it fails due to limitations of the :     expected: 448@@ -84,14 +99,14 @@     expr <- Dhall.inputExpr file     entries <- decodeDirectoryTree expr     entries @?=-        [ FileEntry $ Entry+        [ TextFileEntry $ Entry             { entryName = "ids"             , entryContent = ""             , entryUser = Just (UserId 0)             , entryGroup = Just (GroupId 0)             , entryMode = Nothing             }-        , FileEntry $ Entry+        , TextFileEntry $ Entry             { entryName = "names"             , entryContent = ""             , entryUser = Just (UserName "user")@@ -116,12 +131,12 @@      toDirectoryTree allowSeparators outDir $ Dhall.Core.denote expr -    walkFsTree outDir+    Data.List.sort <$> walkFsTree outDir  data WalkEntry     = Directory FilePath     | File FilePath-    deriving (Eq, Show)+    deriving (Eq, Ord, Show)  walkFsTree :: FilePath -> IO [WalkEntry] walkFsTree dir = do
tests/Dhall/Test/Package.hs view
@@ -3,7 +3,7 @@  module Dhall.Test.Package where -import           Control.Exception  (Exception, displayException, try)+import           Control.Exception  (Exception, displayException, finally, try) import           Data.List.NonEmpty (NonEmpty (..)) import           Data.Void          (Void) import           Dhall.Core@@ -19,6 +19,8 @@     ) import qualified Dhall.Map          as Map import           Dhall.Package+import           Lens.Micro         (set)+import qualified System.Directory   as Directory import           System.FilePath    ((</>)) import           Test.Tasty import           Test.Tasty.HUnit@@ -31,6 +33,7 @@     , packageEmptyDirectory     , packageSingleDirectory     , packageNested+    , packageRecursive     , packageMissingFile     , packageFilesDifferentDirs     , packageIncompatibleFiles@@ -43,7 +46,7 @@     let package :: Expr Void Import         package = RecordLit Map.empty -    (output, expr) <- getPackagePathAndContent Nothing ("./tests/package/package.dhall" :| [])+    (output, expr) <- getPackagePathAndContent defaultOptions ("./tests/package/package.dhall" :| [])     assertEqual "path" path output     assertEqual "content" package expr @@ -55,7 +58,10 @@         package = RecordLit $             Map.singleton "package" $ makeRecordField $ Embed packageDhall -    (output, expr) <- getPackagePathAndContent (Just "custom.dhall") ("./tests/package/package.dhall" :| [])+    let options :: Options+        options = set packageFileName "custom.dhall" defaultOptions++    (output, expr) <- getPackagePathAndContent options ("./tests/package/package.dhall" :| [])     assertEqual "path" path output     assertEqual "content" package expr @@ -67,7 +73,7 @@         package = RecordLit $             Map.singleton "test" $ makeRecordField $ Embed testDhall -    (output, expr) <- getPackagePathAndContent Nothing ("./tests/package/dir/test.dhall" :| [])+    (output, expr) <- getPackagePathAndContent defaultOptions ("./tests/package/dir/test.dhall" :| [])     assertEqual "path" path output     assertEqual "content" package expr @@ -78,7 +84,7 @@     let package :: Expr Void Import         package = RecordLit Map.empty -    (output, expr) <- getPackagePathAndContent Nothing ("./tests/package/empty" :| [])+    (output, expr) <- getPackagePathAndContent defaultOptions ("./tests/package/empty" :| [])     assertEqual "path" path output     assertEqual "content" package expr @@ -90,7 +96,7 @@         package = RecordLit $ Map.singleton "test" $             makeRecordField $ Embed testDhall -    (output, expr) <- getPackagePathAndContent Nothing ("./tests/package/dir" :| [])+    (output, expr) <- getPackagePathAndContent defaultOptions ("./tests/package/dir" :| [])     assertEqual "path" path output     assertEqual "content" package expr @@ -108,7 +114,7 @@             , ("test", makeRecordField $ Embed testDhall)             ] -    (output, expr) <- getPackagePathAndContent Nothing+    (output, expr) <- getPackagePathAndContent defaultOptions         ( "./tests/package/test.dhall" :|         [ "./tests/package/dir/test.dhall"         , "./tests/package/other/package.dhall"@@ -116,10 +122,34 @@     assertEqual "path" path output     assertEqual "content" package expr +packageRecursive :: TestTree+packageRecursive = testCase "recursively create subpackages" $ removePackagesAfter $ do+    let path = "./tests/package/dir" </> "package.dhall"++    let package :: Expr Void Import+        package = RecordLit $ Map.fromList+            [ ("subdirectory1", makeRecordField $ Embed subdirectoryPackageDhall1)+            , ("subdirectory2", makeRecordField $ Embed subdirectoryPackageDhall2)+            , ("test", makeRecordField $ Embed testDhall)+            ]++    let options :: Options+        options = set packagingMode RecursiveSubpackages defaultOptions++    (output, expr) <- getPackagePathAndContent options+        ( "./tests/package/dir" :| [] )+    assertEqual "path" path output+    assertEqual "content" package expr+    where+        removePackagesAfter :: IO a -> IO a+        removePackagesAfter action = action `finally` do+            Directory.removePathForcibly "./tests/package/dir/subdirectory1/package.dhall"+            Directory.removePathForcibly "./tests/package/dir/subdirectory2/package.dhall"+ packageMissingFile :: TestTree packageMissingFile = testCase "missing file" $ do     let action :: IO (FilePath, Expr Void Import)-        action = getPackagePathAndContent Nothing ("./tests/package/missing.dhall" :| [])+        action = getPackagePathAndContent defaultOptions ("./tests/package/missing.dhall" :| [])      assertThrow action $ \case         InvalidPath "./tests/package/missing.dhall" -> True@@ -128,7 +158,10 @@ packageFilesDifferentDirs :: TestTree packageFilesDifferentDirs = testCase "files from different directories" $ do     let action :: IO (FilePath, Expr Void Import)-        action = getPackagePathAndContent Nothing ("./tests/package/dir/test.dhall" :| ["./tests/package/test/test.dhall"])+        action = getPackagePathAndContent defaultOptions+            ( "./tests/package/dir/test.dhall" :|+            [ "./tests/package/test/test.dhall"+            ])      assertThrow action $ \case         AmbiguousOutputDirectory "./tests/package/dir" "./tests/package/test" -> True@@ -137,7 +170,10 @@ packageIncompatibleFiles :: TestTree packageIncompatibleFiles = testCase "files that are incompatible" $ do     let action :: IO (FilePath, Expr Void Import)-        action = getPackagePathAndContent Nothing ("./tests/package/test.dhall" :| ["./tests/package/test/test.dhall"])+        action = getPackagePathAndContent defaultOptions+            ( "./tests/package/test.dhall" :|+            [ "./tests/package/test/test.dhall"+            ])      assertThrow action $ \case         IncompatiblePaths xs -> xs == [ testDhall , testTestDhall ]@@ -190,6 +226,28 @@         }     , importMode = Code     }++subdirectoryPackageDhall1 :: Import+subdirectoryPackageDhall1 = Import+    { importHashed = ImportHashed+        { hash = Nothing+        , importType = Local Here $ File+            { directory = Directory {components = ["subdirectory1"]}+            , file = "package.dhall"}+            }+        , importMode = Code+        }++subdirectoryPackageDhall2 :: Import+subdirectoryPackageDhall2 = Import+    { importHashed = ImportHashed+        { hash = Nothing+        , importType = Local Here $ File+            { directory = Directory {components = ["subdirectory2"]}+            , file = "package.dhall"}+            }+        , importMode = Code+        }  testTestDhall :: Import testTestDhall = Import
tests/Dhall/Test/QuickCheck.hs view
@@ -103,7 +103,7 @@ import qualified Dhall.Set import qualified Dhall.TypeCheck import qualified Generic.Random-import qualified Lens.Family           as Lens+import qualified Lens.Micro            as Lens import qualified Numeric.Natural       as Nat import qualified Test.QuickCheck import qualified Test.Tasty
tests/Dhall/Test/Regression.hs view
@@ -7,7 +7,7 @@  import Data.Either.Validation (Validation (..)) import Data.Void              (Void)-import Dhall.Core             (Expr(..), ReifiedNormalizer(..))+import Dhall.Core             (Expr (..), ReifiedNormalizer (..)) import Dhall.Import           (Imported, MissingImports (..)) import Dhall.Parser           (SourcedException (..), Src) import Dhall.TypeCheck        (TypeError)@@ -25,7 +25,7 @@ import qualified Dhall.Pretty import qualified Dhall.Test.Util           as Util import qualified Dhall.TypeCheck-import qualified Lens.Family               as Lens+import qualified Lens.Micro                as Lens import qualified Prettyprinter import qualified Prettyprinter.Render.Text import qualified System.Timeout
tests/Dhall/Test/Substitution.hs view
@@ -11,7 +11,7 @@ import qualified Data.Either.Validation import qualified Dhall import qualified Dhall.Map-import qualified Lens.Family            as Lens+import qualified Lens.Micro             as Lens  data Result = Failure Integer | Success String     deriving (Eq, Dhall.Generic, Show)
tests/Dhall/Test/Util.hs view
@@ -71,9 +71,9 @@ #if defined(WITH_HTTP) && defined(NETWORK_TESTS) import qualified Data.Foldable #else-import Control.Monad.IO.Class   (MonadIO (..))-import Dhall.Core               (Directory (..), File (..), URL (..))-import Lens.Family.State.Strict (zoom)+import Control.Monad.IO.Class (MonadIO (..))+import Dhall.Core             (Directory (..), File (..), URL (..))+import Lens.Micro.Mtl         (zoom)  import qualified Data.Foldable import qualified Data.Text.Encoding
+ tests/package/dir/subdirectory1/test.dhall view
+ tests/package/dir/subdirectory2/wrong-extension.txt view
+ tests/to-directory-tree/fixpoint-allow-path-separators.dhall view
@@ -0,0 +1,25 @@+let User = (./fixpoint-helper.dhall).User++let Group = (./fixpoint-helper.dhall).Group++let Mode = (./fixpoint-helper.dhall).Mode++let Make = (./fixpoint-helper.dhall).Make++in  \(r : Type) ->+    \(make : Make r) ->+      [ make.file+          { name = "non-existent-1/file"+          , content = ""+          , user = None User+          , group = None Group+          , mode = None Mode+          }+      , make.directory+          { name = "non-existent-2/directory"+          , content = [] : List r+          , user = None User+          , group = None Group+          , mode = None Mode+          }+      ]
tests/to-directory-tree/fixpoint-helper.dhall view
@@ -21,6 +21,10 @@         }  let Make =-      \(r : Type) -> { directory : Entry (List r) -> r, file : Entry Text -> r }+      \(r : Type) ->+        { directory : Entry (List r) -> r+        , binary-file : Entry Bytes -> r+        , file : Entry Text -> r+        }  in  { User, Group, Access, Mode, Entry, Make }
tests/to-directory-tree/fixpoint-simple.dhall view
@@ -8,18 +8,18 @@  in  \(r : Type) ->     \(make : Make r) ->-        [ make.file-            { name = "file"-            , content = ""-            , user = None User-            , group = None Group-            , mode = None Mode-            }-        , make.directory-            { name = "directory"-            , content = [] : List r-            , user = None User-            , group = None Group-            , mode = None Mode-            }-        ]+      [ make.file+          { name = "file"+          , content = ""+          , user = None User+          , group = None Group+          , mode = None Mode+          }+      , make.directory+          { name = "directory"+          , content = [] : List r+          , user = None User+          , group = None Group+          , mode = None Mode+          }+      ]
tests/to-directory-tree/type.dhall view
@@ -23,9 +23,14 @@ in  forall (result : Type) ->       let DirectoryEntry = Entry (List result) -      let FileEntry = Entry Text+      let BinaryFileEntry = Entry Bytes +      let TextFileEntry = Entry Text+       let Make =-            { directory : DirectoryEntry -> result, file : FileEntry -> result }+            { directory : DirectoryEntry -> result+            , binary-file : BinaryFileEntry -> result+            , file : TextFileEntry -> result+            }        in  forall (make : Make) -> List result