From 34d06aa82aea4daa248c08d4f181c91bf5dd4ba0 Mon Sep 17 00:00:00 2001 From: Joeri Exelmans Date: Thu, 8 May 2025 23:35:34 +0200 Subject: [PATCH] small changes --- examples/environment.js | 16 ++++++++++++---- lib/primitives/double.types.js | 3 ++- lib/primitives/dynamic.js | 10 +++++++++- 3 files changed, 23 insertions(+), 6 deletions(-) diff --git a/examples/environment.js b/examples/environment.js index d79748e..6ff41fa 100644 --- a/examples/environment.js +++ b/examples/environment.js @@ -3,17 +3,25 @@ import { ModuleStd } from "../lib/stdlib.js"; import { emptyDict, get, set } from "../lib/structures/dict.js"; import { emptySet, add } from "../lib/structures/set.js"; import { makeCompareFn } from "../lib/compare/dynamic.js" +import { Type } from "../lib/primitives/primitive_types.js"; -// console.log(ModuleStd); +console.log(ModuleStd); + +const addEntry = dict => i => t => { + const setOfInstances = get(dict)(t) || emptySet(makeCompareFn(t)); + return set(dict)(t)(add(setOfInstances)(i)); +} const typeDict = ModuleStd.reduce((typeDict, {i, t}) => { try { - const instances = get(typeDict)(t) || emptySet(makeCompareFn(t)); - return set(typeDict)(t)(add(instances)(i)); + // add instance to type: + return addEntry( + addEntry(typeDict)(i)(t) + )(t)(Type); } catch (e) { console.log('warning:',e.message); return typeDict; } }, emptyDict(compareTypes)); -console.log(typeDict); \ No newline at end of file +console.log(typeDict); diff --git a/lib/primitives/double.types.js b/lib/primitives/double.types.js index 6e64769..3ff87b7 100644 --- a/lib/primitives/double.types.js +++ b/lib/primitives/double.types.js @@ -1,10 +1,11 @@ import { getDefaultTypeParser } from "../parser/type_parser.js"; import { addDouble, eqDouble, mulDouble } from "./double.js"; +import { newDynamic } from "./dynamic.js"; const mkType = getDefaultTypeParser(); export const ModuleDouble = [ - { i: addDouble, t: mkType("Double -> Double -> Double") }, + newDynamic(addDouble)(mkType("Double -> Double -> Double")), { i: mulDouble, t: mkType("Double -> Double -> Double") }, { i: eqDouble, t: mkType("Double -> Double -> Bool") }, ]; diff --git a/lib/primitives/dynamic.js b/lib/primitives/dynamic.js index e00e67e..3ef2769 100644 --- a/lib/primitives/dynamic.js +++ b/lib/primitives/dynamic.js @@ -1,6 +1,14 @@ +import { inspect } from "node:util"; import { assignFn } from "../generics/generics.js"; -export const newDynamic = i => t => ({i, t}); +function inspectDynamic(_depth, options, inspect) { + return `${inspect(this.i, options)} :: ${inspect(this.t, options)}`; +} + +export const newDynamic = i => t => ({ + i, t, + [inspect.custom]: inspectDynamic, +}); export const getInst = lnk => lnk.i; export const getType = lnk => lnk.t;