Skip to content

Commit

Permalink
Use type applications for Proxy (purescript#1235)
Browse files Browse the repository at this point in the history
  • Loading branch information
f-f authored Jun 24, 2024
1 parent d401f1f commit a9a3623
Show file tree
Hide file tree
Showing 6 changed files with 136 additions and 139 deletions.
8 changes: 4 additions & 4 deletions bin/src/Optparse.purs
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ fromRecord
-> Parser { | rout }
fromRecord =
map Builder.buildFromScratch
<<< buildRecordArgs (Proxy :: _ rl)
<<< buildRecordArgs (Proxy @rl)

class BuildRecordArgs (rl :: RowList Type) rs rin rout | rl -> rout where
buildRecordArgs :: Proxy rl -> rs -> Parser (Builder rin rout)
Expand All @@ -40,6 +40,6 @@ instance buildArgsCons ::
) =>
BuildRecordArgs (RowList.Cons sym (Parser a) next) { | rs } { | rin } { | rout } where
buildRecordArgs _ rs =
(\a b -> Builder.insert (Proxy :: _ sym) a >>> b)
<$> Record.get (Proxy :: _ sym) rs
<*> buildRecordArgs (Proxy :: _ next) rs
(\a b -> Builder.insert (Proxy @sym) a >>> b)
<$> Record.get (Proxy @sym) rs
<*> buildRecordArgs (Proxy @next) rs
96 changes: 48 additions & 48 deletions core/src/Config.purs
Original file line number Diff line number Diff line change
Expand Up @@ -65,8 +65,8 @@ type Config =

configCodec :: CJ.Codec Config
configCodec = CJ.object
$ CJ.recordPropOptional (Proxy :: _ "package") packageConfigCodec
$ CJ.recordPropOptional (Proxy :: _ "workspace") workspaceConfigCodec
$ CJ.recordPropOptional (Proxy @"package") packageConfigCodec
$ CJ.recordPropOptional (Proxy @"workspace") workspaceConfigCodec
$ CJ.record

type PackageConfig =
Expand All @@ -82,14 +82,14 @@ type PackageConfig =

packageConfigCodec :: CJ.Codec PackageConfig
packageConfigCodec = CJ.named "PackageConfig" $ CJ.object
$ CJ.recordProp (Proxy :: _ "name") PackageName.codec
$ CJ.recordPropOptional (Proxy :: _ "description") CJ.string
$ CJ.recordProp (Proxy :: _ "dependencies") dependenciesCodec
$ CJ.recordPropOptional (Proxy :: _ "build") packageBuildOptionsCodec
$ CJ.recordPropOptional (Proxy :: _ "bundle") bundleConfigCodec
$ CJ.recordPropOptional (Proxy :: _ "run") runConfigCodec
$ CJ.recordPropOptional (Proxy :: _ "test") testConfigCodec
$ CJ.recordPropOptional (Proxy :: _ "publish") publishConfigCodec
$ CJ.recordProp (Proxy @"name") PackageName.codec
$ CJ.recordPropOptional (Proxy @"description") CJ.string
$ CJ.recordProp (Proxy @"dependencies") dependenciesCodec
$ CJ.recordPropOptional (Proxy @"build") packageBuildOptionsCodec
$ CJ.recordPropOptional (Proxy @"bundle") bundleConfigCodec
$ CJ.recordPropOptional (Proxy @"run") runConfigCodec
$ CJ.recordPropOptional (Proxy @"test") testConfigCodec
$ CJ.recordPropOptional (Proxy @"publish") publishConfigCodec
$ CJ.record

type PublishConfig =
Expand All @@ -102,11 +102,11 @@ type PublishConfig =

publishConfigCodec :: CJ.Codec PublishConfig
publishConfigCodec = CJ.named "PublishConfig" $ CJ.object
$ CJ.recordProp (Proxy :: _ "version") Version.codec
$ CJ.recordProp (Proxy :: _ "license") License.codec
$ CJ.recordPropOptional (Proxy :: _ "location") Location.codec
$ CJ.recordPropOptional (Proxy :: _ "include") (CJ.array CJ.string)
$ CJ.recordPropOptional (Proxy :: _ "exclude") (CJ.array CJ.string)
$ CJ.recordProp (Proxy @"version") Version.codec
$ CJ.recordProp (Proxy @"license") License.codec
$ CJ.recordPropOptional (Proxy @"location") Location.codec
$ CJ.recordPropOptional (Proxy @"include") (CJ.array CJ.string)
$ CJ.recordPropOptional (Proxy @"exclude") (CJ.array CJ.string)
$ CJ.record

type RunConfig =
Expand All @@ -116,8 +116,8 @@ type RunConfig =

runConfigCodec :: CJ.Codec RunConfig
runConfigCodec = CJ.named "RunConfig" $ CJ.object
$ CJ.recordPropOptional (Proxy :: _ "main") CJ.string
$ CJ.recordPropOptional (Proxy :: _ "execArgs") (CJ.array CJ.string)
$ CJ.recordPropOptional (Proxy @"main") CJ.string
$ CJ.recordPropOptional (Proxy @"execArgs") (CJ.array CJ.string)
$ CJ.record

type TestConfig =
Expand All @@ -131,12 +131,12 @@ type TestConfig =

testConfigCodec :: CJ.Codec TestConfig
testConfigCodec = CJ.named "TestConfig" $ CJ.object
$ CJ.recordProp (Proxy :: _ "main") CJ.string
$ CJ.recordPropOptional (Proxy :: _ "execArgs") (CJ.array CJ.string)
$ CJ.recordPropOptional (Proxy :: _ "censorTestWarnings") censorBuildWarningsCodec
$ CJ.recordPropOptional (Proxy :: _ "strict") CJ.boolean
$ CJ.recordPropOptional (Proxy :: _ "pedanticPackages") CJ.boolean
$ CJ.recordProp (Proxy :: _ "dependencies") dependenciesCodec
$ CJ.recordProp (Proxy @"main") CJ.string
$ CJ.recordPropOptional (Proxy @"execArgs") (CJ.array CJ.string)
$ CJ.recordPropOptional (Proxy @"censorTestWarnings") censorBuildWarningsCodec
$ CJ.recordPropOptional (Proxy @"strict") CJ.boolean
$ CJ.recordPropOptional (Proxy @"pedanticPackages") CJ.boolean
$ CJ.recordProp (Proxy @"dependencies") dependenciesCodec
$ CJ.record

type BackendConfig =
Expand All @@ -146,8 +146,8 @@ type BackendConfig =

backendConfigCodec :: CJ.Codec BackendConfig
backendConfigCodec = CJ.named "BackendConfig" $ CJ.object
$ CJ.recordProp (Proxy :: _ "cmd") CJ.string
$ CJ.recordPropOptional (Proxy :: _ "args") (CJ.array CJ.string)
$ CJ.recordProp (Proxy @"cmd") CJ.string
$ CJ.recordPropOptional (Proxy @"args") (CJ.array CJ.string)
$ CJ.record

type PackageBuildOptionsInput =
Expand All @@ -158,9 +158,9 @@ type PackageBuildOptionsInput =

packageBuildOptionsCodec :: CJ.Codec PackageBuildOptionsInput
packageBuildOptionsCodec = CJ.named "PackageBuildOptionsInput" $ CJ.object
$ CJ.recordPropOptional (Proxy :: _ "censorProjectWarnings") censorBuildWarningsCodec
$ CJ.recordPropOptional (Proxy :: _ "strict") CJ.boolean
$ CJ.recordPropOptional (Proxy :: _ "pedanticPackages") CJ.boolean
$ CJ.recordPropOptional (Proxy @"censorProjectWarnings") censorBuildWarningsCodec
$ CJ.recordPropOptional (Proxy @"strict") CJ.boolean
$ CJ.recordPropOptional (Proxy @"pedanticPackages") CJ.boolean
$ CJ.record

type BundleConfig =
Expand All @@ -174,12 +174,12 @@ type BundleConfig =

bundleConfigCodec :: CJ.Codec BundleConfig
bundleConfigCodec = CJ.named "BundleConfig" $ CJ.object
$ CJ.recordPropOptional (Proxy :: _ "minify") CJ.boolean
$ CJ.recordPropOptional (Proxy :: _ "module") CJ.string
$ CJ.recordPropOptional (Proxy :: _ "outfile") CJ.string
$ CJ.recordPropOptional (Proxy :: _ "platform") bundlePlatformCodec
$ CJ.recordPropOptional (Proxy :: _ "type") bundleTypeCodec
$ CJ.recordPropOptional (Proxy :: _ "extraArgs") (CJ.array CJ.string)
$ CJ.recordPropOptional (Proxy @"minify") CJ.boolean
$ CJ.recordPropOptional (Proxy @"module") CJ.string
$ CJ.recordPropOptional (Proxy @"outfile") CJ.string
$ CJ.recordPropOptional (Proxy @"platform") bundlePlatformCodec
$ CJ.recordPropOptional (Proxy @"type") bundleTypeCodec
$ CJ.recordPropOptional (Proxy @"extraArgs") (CJ.array CJ.string)
$ CJ.record

data BundlePlatform = BundleNode | BundleBrowser
Expand Down Expand Up @@ -292,10 +292,10 @@ type WorkspaceConfig =

workspaceConfigCodec :: CJ.Codec WorkspaceConfig
workspaceConfigCodec = CJ.named "WorkspaceConfig" $ CJ.object
$ CJ.recordPropOptional (Proxy :: _ "packageSet") setAddressCodec
$ CJ.recordPropOptional (Proxy :: _ "backend") backendConfigCodec
$ CJ.recordPropOptional (Proxy :: _ "buildOpts") buildOptionsCodec
$ CJ.recordPropOptional (Proxy :: _ "extraPackages") (Internal.Codec.packageMap extraPackageCodec)
$ CJ.recordPropOptional (Proxy @"packageSet") setAddressCodec
$ CJ.recordPropOptional (Proxy @"backend") backendConfigCodec
$ CJ.recordPropOptional (Proxy @"buildOpts") buildOptionsCodec
$ CJ.recordPropOptional (Proxy @"extraPackages") (Internal.Codec.packageMap extraPackageCodec)
$ CJ.record

type WorkspaceBuildOptionsInput =
Expand All @@ -306,9 +306,9 @@ type WorkspaceBuildOptionsInput =

buildOptionsCodec :: CJ.Codec WorkspaceBuildOptionsInput
buildOptionsCodec = CJ.named "WorkspaceBuildOptionsInput" $ CJ.object
$ CJ.recordPropOptional (Proxy :: _ "output") CJ.string
$ CJ.recordPropOptional (Proxy :: _ "censorLibraryWarnings") censorBuildWarningsCodec
$ CJ.recordPropOptional (Proxy :: _ "statVerbosity") statVerbosityCodec
$ CJ.recordPropOptional (Proxy @"output") CJ.string
$ CJ.recordPropOptional (Proxy @"censorLibraryWarnings") censorBuildWarningsCodec
$ CJ.recordPropOptional (Proxy @"statVerbosity") statVerbosityCodec
$ CJ.record

data CensorBuildWarnings
Expand Down Expand Up @@ -456,10 +456,10 @@ type GitPackage =

gitPackageCodec :: CJ.Codec GitPackage
gitPackageCodec = CJ.named "GitPackage" $ CJ.object
$ CJ.recordProp (Proxy :: _ "git") CJ.string
$ CJ.recordProp (Proxy :: _ "ref") CJ.string
$ CJ.recordPropOptional (Proxy :: _ "subdir") CJ.string
$ CJ.recordPropOptional (Proxy :: _ "dependencies") dependenciesCodec
$ CJ.recordProp (Proxy @"git") CJ.string
$ CJ.recordProp (Proxy @"ref") CJ.string
$ CJ.recordPropOptional (Proxy @"subdir") CJ.string
$ CJ.recordPropOptional (Proxy @"dependencies") dependenciesCodec
$ CJ.record

-- | The format of a legacy packages.json package set entry for an individual
Expand All @@ -472,7 +472,7 @@ type LegacyPackageSetEntry =

legacyPackageSetEntryCodec :: CJ.Codec LegacyPackageSetEntry
legacyPackageSetEntryCodec = CJ.named "LegacyPackageSetEntry" $ CJ.object
$ CJ.recordProp (Proxy :: _ "repo") CJ.string
$ CJ.recordProp (Proxy :: _ "version") CJ.string
$ CJ.recordProp (Proxy :: _ "dependencies") (CJ.array PackageName.codec)
$ CJ.recordProp (Proxy @"repo") CJ.string
$ CJ.recordProp (Proxy @"version") CJ.string
$ CJ.recordProp (Proxy @"dependencies") (CJ.array PackageName.codec)
$ CJ.record
2 changes: 1 addition & 1 deletion docs-search/common/src/Docs/Search/JsonCodec.purs
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ import Unsafe.Coerce (unsafeCoerce)
-- | Equivalent to `Data.Variant.inj`, just uses a Visible Type Application instead of Proxy
-- | Useful for deriving codecs for sum types
inject :: forall @sym a r1 r2. Cons sym a r1 r2 => IsSymbol sym => a -> Variant r2
inject = inj (Proxy :: _ sym)
inject = inj (Proxy @sym)

fromUni
:: forall a
Expand Down
2 changes: 1 addition & 1 deletion src/Spago/Command/Ls.purs
Original file line number Diff line number Diff line change
Expand Up @@ -156,7 +156,7 @@ formatPackagesJson packages = output $ OutputJson (packageMap packageCodec) (map
, package: Config.packageConfigCodec
, hasTests: CJ.boolean
}
) <<< Record.delete (Proxy :: _ "doc")
) <<< Record.delete (Proxy @"doc")

formatPackagesTable :: forall m. MonadEffect m => Array (Tuple PackageName Package) -> m Unit
formatPackagesTable pkgs = output $ OutputTable
Expand Down
60 changes: 30 additions & 30 deletions src/Spago/Lock.purs
Original file line number Diff line number Diff line change
Expand Up @@ -61,29 +61,29 @@ type WorkspaceLockPackage =

lockfileCodec :: CJ.Codec Lockfile
lockfileCodec = CJ.named "Lockfile" $ CJ.object
$ CJ.recordProp (Proxy :: _ "workspace") workspaceLockCodec
$ CJ.recordProp (Proxy :: _ "packages") (Registry.Codec.packageMap lockEntryCodec)
$ CJ.recordProp (Proxy @"workspace") workspaceLockCodec
$ CJ.recordProp (Proxy @"packages") (Registry.Codec.packageMap lockEntryCodec)
$ CJ.record

workspaceLockCodec :: CJ.Codec WorkspaceLock
workspaceLockCodec = CJ.named "WorkspaceLock" $ CJ.object
$ CJ.recordProp (Proxy :: _ "packages") (Registry.Codec.packageMap dependenciesCodec)
$ CJ.recordPropOptional (Proxy :: _ "package_set") packageSetCodec
$ CJ.recordProp (Proxy :: _ "extra_packages") (Registry.Codec.packageMap Config.extraPackageCodec)
$ CJ.recordProp (Proxy @"packages") (Registry.Codec.packageMap dependenciesCodec)
$ CJ.recordPropOptional (Proxy @"package_set") packageSetCodec
$ CJ.recordProp (Proxy @"extra_packages") (Registry.Codec.packageMap Config.extraPackageCodec)
$ CJ.record
where
dependenciesCodec = CJ.named "Dependencies" $ CJ.object
$ CJ.recordProp (Proxy :: _ "path") CJ.string
$ CJ.recordProp (Proxy :: _ "dependencies") Config.dependenciesCodec
$ CJ.recordProp (Proxy :: _ "test_dependencies") Config.dependenciesCodec
$ CJ.recordProp (Proxy :: _ "build_plan") (CJ.Common.set PackageName.codec)
$ CJ.recordProp (Proxy @"path") CJ.string
$ CJ.recordProp (Proxy @"dependencies") Config.dependenciesCodec
$ CJ.recordProp (Proxy @"test_dependencies") Config.dependenciesCodec
$ CJ.recordProp (Proxy @"build_plan") (CJ.Common.set PackageName.codec)
$ CJ.record

packageSetCodec :: CJ.Codec PackageSetInfo
packageSetCodec = CJ.named "PackageSetInfo" $ CJ.object
$ CJ.recordProp (Proxy :: _ "address") Config.setAddressCodec
$ CJ.recordProp (Proxy :: _ "compiler") Range.codec
$ CJ.recordProp (Proxy :: _ "content") (Registry.Codec.packageMap Core.remotePackageCodec)
$ CJ.recordProp (Proxy @"address") Config.setAddressCodec
$ CJ.recordProp (Proxy @"compiler") Range.codec
$ CJ.recordProp (Proxy @"content") (Registry.Codec.packageMap Core.remotePackageCodec)
$ CJ.record

lockEntryCodec :: CJ.Codec LockEntry
Expand Down Expand Up @@ -115,13 +115,13 @@ type PathLock =

pathLockCodec :: CJ.Codec PathLock
pathLockCodec = Profunctor.dimap toRep fromRep $ CJ.named "PathLock" $ CJ.object
$ CJ.recordProp (Proxy :: _ "type") (constant pathLockType)
$ CJ.recordProp (Proxy :: _ "path") CJ.string
$ CJ.recordProp (Proxy :: _ "dependencies") (CJ.array PackageName.codec)
$ CJ.recordProp (Proxy @"type") (constant pathLockType)
$ CJ.recordProp (Proxy @"path") CJ.string
$ CJ.recordProp (Proxy @"dependencies") (CJ.array PackageName.codec)
$ CJ.record
where
toRep = Record.insert (Proxy :: _ "type") pathLockType
fromRep = Record.delete (Proxy :: _ "type")
toRep = Record.insert (Proxy @"type") pathLockType
fromRep = Record.delete (Proxy @"type")

type GitLock =
{ url :: String
Expand All @@ -132,15 +132,15 @@ type GitLock =

gitLockCodec :: CJ.Codec GitLock
gitLockCodec = Profunctor.dimap toRep fromRep $ CJ.named "GitLock" $ CJ.object
$ CJ.recordProp (Proxy :: _ "type") (constant gitLockType)
$ CJ.recordProp (Proxy :: _ "url") CJ.string
$ CJ.recordProp (Proxy :: _ "rev") CJ.string
$ CJ.recordPropOptional (Proxy :: _ "subdir") CJ.string
$ CJ.recordProp (Proxy :: _ "dependencies") (CJ.array PackageName.codec)
$ CJ.recordProp (Proxy @"type") (constant gitLockType)
$ CJ.recordProp (Proxy @"url") CJ.string
$ CJ.recordProp (Proxy @"rev") CJ.string
$ CJ.recordPropOptional (Proxy @"subdir") CJ.string
$ CJ.recordProp (Proxy @"dependencies") (CJ.array PackageName.codec)
$ CJ.record
where
toRep = Record.insert (Proxy :: _ "type") gitLockType
fromRep = Record.delete (Proxy :: _ "type")
toRep = Record.insert (Proxy @"type") gitLockType
fromRep = Record.delete (Proxy @"type")

type RegistryLock =
{ version :: Version
Expand All @@ -150,14 +150,14 @@ type RegistryLock =

registryLockCodec :: CJ.Codec RegistryLock
registryLockCodec = Profunctor.dimap toRep fromRep $ CJ.named "RegistryLock" $ CJ.object
$ CJ.recordProp (Proxy :: _ "type") (constant registryLockType)
$ CJ.recordProp (Proxy :: _ "version") Version.codec
$ CJ.recordProp (Proxy :: _ "integrity") Sha256.codec
$ CJ.recordProp (Proxy :: _ "dependencies") (CJ.array PackageName.codec)
$ CJ.recordProp (Proxy @"type") (constant registryLockType)
$ CJ.recordProp (Proxy @"version") Version.codec
$ CJ.recordProp (Proxy @"integrity") Sha256.codec
$ CJ.recordProp (Proxy @"dependencies") (CJ.array PackageName.codec)
$ CJ.record
where
toRep = Record.insert (Proxy :: _ "type") registryLockType
fromRep = Record.delete (Proxy :: _ "type")
toRep = Record.insert (Proxy @"type") registryLockType
fromRep = Record.delete (Proxy @"type")

constant :: String CJ.Codec String
constant val = Codec.codec' decode encode
Expand Down
Loading

0 comments on commit a9a3623

Please sign in to comment.