82 lines
2.9 KiB
Nix
82 lines
2.9 KiB
Nix
{
|
|
description = "Core library of general-purpose expressions worth implementing as intrinsics";
|
|
inputs
|
|
= {
|
|
libintrinsics.url = "github:sivizius/nixfiles/development?dir=libs/intrinsics";
|
|
};
|
|
outputs
|
|
= { self, libintrinsics, ... }:
|
|
let
|
|
intrinsics = libintrinsics.lib;
|
|
|
|
adjustArguments
|
|
= { arguments, fileName, moduleName, source, ... }:
|
|
intrinsics.mapAttrs
|
|
(
|
|
moduleName:
|
|
module:
|
|
let
|
|
initialisationData'
|
|
= {
|
|
inherit fileName moduleName;
|
|
source
|
|
= source
|
|
{
|
|
inherit fileName;
|
|
attribute
|
|
= if moduleName != null
|
|
then
|
|
moduleName
|
|
else
|
|
intrinsics.baseNameOf fileName;
|
|
};
|
|
};
|
|
in
|
|
if module.__type__ or null == "NeedInitialisation"
|
|
then
|
|
module.initialise module.body initialisationData'
|
|
else
|
|
module
|
|
)
|
|
arguments;
|
|
|
|
minimal
|
|
= intrinsics.scopedImport
|
|
{ inherit Library; }
|
|
./lib
|
|
{ inherit intrinsics; };
|
|
|
|
Library
|
|
= {
|
|
__functor
|
|
= { ... }:
|
|
libraryName:
|
|
{ ... } @ environment:
|
|
{ ... } @ modules:
|
|
let
|
|
arguments
|
|
= library
|
|
// environment;
|
|
library
|
|
= intrinsics.mapAttrs
|
|
(
|
|
moduleName:
|
|
fileName:
|
|
intrinsics.import fileName
|
|
(adjustArguments { inherit arguments fileName moduleName source; })
|
|
)
|
|
modules;
|
|
source = library.context libraryName;
|
|
in
|
|
library;
|
|
};
|
|
|
|
env = { inherit intrinsics; };
|
|
lib = minimal.library.load ./lib env;
|
|
tests = lib.check.load ./tests env lib;
|
|
in
|
|
{
|
|
inherit lib tests;
|
|
checks = lib.check tests {};
|
|
};
|
|
} |