Repository: karen-irc/option-t
Pull request #1542 (2023-02-02 14:36:01)

Rename `Class*` to `Classic*` internally


Patch:
diff --git a/.eslintignore b/.eslintignore
index aed3ed74..02a473c4 100644
--- a/.eslintignore
+++ b/.eslintignore
@@ -5,5 +5,5 @@ __tmp_cjs/
 node_modules/
 
 # FIXME: remove these from here
-__tests__/ClassOption/type_definition.ts
-__tests__/ClassResult/type_definition_es6.ts
+__tests__/ClassicOption/type_definition.ts
+__tests__/ClassicResult/type_definition_es6.ts
diff --git a/README.md b/README.md
index 34f2df31..c11e0235 100644
--- a/README.md
+++ b/README.md
@@ -217,8 +217,8 @@ However, we think there some different design decision between neverthrow and us
 We does not provide class based implementation and method chaining style.
 Historically, we had provided a method-chain style APIs and data types as tier 1.
 
-- [`ClassOption`](./src/ClassOption/)
-- [`ClassResult`](./src/ClassResult/)
+- [`ClassicOption`](./src/ClassicOption/)
+- [`ClassicResult`](./src/ClassicResult/)
 
 But we gave up method chain style as primary style and switched our primary APIs
 to current simple functions combination style by various reasons.
diff --git a/docs/idiom/README.md b/docs/idiom/README.md
index e3541d78..e7824d31 100644
--- a/docs/idiom/README.md
+++ b/docs/idiom/README.md
@@ -10,3 +10,4 @@ But we often need a glue code for the interoperability to JavaScript world.
 This document provides some idioms of this library for the interoperability to JavaScript world.
 
 * [Express Progressive data](./express_progress.md)
+* [Convert from PromiseSettledResult<T>) to `PlainResult`](./from_promise_settled_result.md)
diff --git a/docs/idiom/from_promise_settled_result.md b/docs/idiom/from_promise_settled_result.md
new file mode 100644
index 00000000..78590675
--- /dev/null
+++ b/docs/idiom/from_promise_settled_result.md
@@ -0,0 +1,22 @@
+# Convert from PromiseSettledResult<T>) to `PlainResult`
+
+```typescript
+import type { Result, createOk, createErr } from 'option-t/PlainResult/Result';
+
+function convertFromPromiseSettledResultToPlainResult<T>(input: PromiseSettledResult<T>): Result<T, unknown> {
+    switch (input.status) {
+        case 'fulfilled': {
+            const value = input.value;
+            const ok = createOk(value);
+            return ok;
+        }
+        case 'rejected': {
+            const reason = input.reason;
+            const err = createErr(reason);
+            return err;
+        }
+        default:
+            throw new TypeError(`unknown PromiseSettledResult status: ${input.status}`);
+    }
+}
+```
diff --git a/docs/public_api_list.md b/docs/public_api_list.md
index 9862b9f8..18572840 100644
--- a/docs/public_api_list.md
+++ b/docs/public_api_list.md
@@ -104,7 +104,6 @@
 - [option-t/PlainResult/equal](../src/PlainResult/equal.ts)
 - [option-t/PlainResult/expect](../src/PlainResult/expect.ts)
 - [option-t/PlainResult/flatten](../src/PlainResult/flatten.ts)
-- [option-t/PlainResult/fromPromiseSettledResult](../src/PlainResult/fromPromiseSettledResult.ts)
 - [option-t/PlainResult/inspect](../src/PlainResult/inspect.ts)
 - [option-t/PlainResult/map](../src/PlainResult/map.ts)
 - [option-t/PlainResult/mapAsync](../src/PlainResult/mapAsync.ts)
diff --git a/docs/wrapper_objects.md b/docs/wrapper_objects.md
index e2bb35c0..7afdd53b 100644
--- a/docs/wrapper_objects.md
+++ b/docs/wrapper_objects.md
@@ -19,7 +19,7 @@ you should avoid to expose this object as a public API of your package_  because
       So we would not like to do this.
 
 
-## [`ClassicOption<T>`](../src/ClassOption/ClassicOption.d.ts) (sometimes call `ClassOption` internally)
+## [`ClassicOption<T>`](../src/ClassicOption/ClassicOption.d.ts)
 
 This can express that there are some values or none.
 
@@ -43,7 +43,7 @@ And this type is defined JSON representations if you serialize them by `JSON.str
 See [`OptionBase.prototype.toJSON()`](./src/Option.js).
 
 
-## [`ClassicResult<T, E>`](./src/ClassResult/ClassicResult.d.ts) (sometimes call `ClassResult` internally)
+## [`ClassicResult<T, E>`](./src/ClassicResult/ClassicResult.d.ts)
 
 This can express that there is some values or some error information.
 
diff --git a/src/ClassOption/ClassicOption.d.ts b/src/ClassicOption/ClassicOption.d.ts
similarity index 100%
rename from src/ClassOption/ClassicOption.d.ts
rename to src/ClassicOption/ClassicOption.d.ts
diff --git a/src/ClassOption/ClassicOption.js b/src/ClassicOption/ClassicOption.js
similarity index 100%
rename from src/ClassOption/ClassicOption.js
rename to src/ClassicOption/ClassicOption.js
diff --git a/src/ClassOption/compat.ts b/src/ClassicOption/compat.ts
similarity index 100%
rename from src/ClassOption/compat.ts
rename to src/ClassicOption/compat.ts
diff --git a/src/ClassicOption/index.ts b/src/ClassicOption/index.ts
new file mode 100644
index 00000000..b93eeba3
--- /dev/null
+++ b/src/ClassicOption/index.ts
@@ -0,0 +1,20 @@
+export {
+    type ClassicTryTransformFn,
+    type ClassicTryRecoveryFn,
+    ClassicOptionBase,
+    type ClassicOption,
+    createClassicSome,
+    createClassicNone,
+    ClassicSomeConstructor,
+    ClassicNoneConstructor,
+    type ClassicTryTransformFn as FlatmapFn,
+    type ClassicTryRecoveryFn as MayRecoveryFn,
+    ClassicOptionBase as OptionBase,
+    type ClassicOption as Option,
+    createClassicSome as createSome,
+    createClassicNone as createNone,
+    ClassicSomeConstructor as Some,
+    ClassicNoneConstructor as None,
+} from './ClassicOption.js';
+
+export { compatToClassicOption, compatToPlainOption } from './compat.js';
diff --git a/src/ClassResult/ClassicResult.d.ts b/src/ClassicResult/ClassicResult.d.ts
similarity index 99%
rename from src/ClassResult/ClassicResult.d.ts
rename to src/ClassicResult/ClassicResult.d.ts
index fe044afe..09036cbc 100644
--- a/src/ClassResult/ClassicResult.d.ts
+++ b/src/ClassicResult/ClassicResult.d.ts
@@ -2,7 +2,7 @@ import type {
     ClassicOption,
     ClassicSome as Some,
     ClassicNone as None,
-} from '../ClassOption/ClassicOption.js';
+} from '../ClassicOption/ClassicOption.js';
 import type { TransformFn, RecoveryFromErrorFn, EffectFn } from '../internal/Function.js';
 
 /**
diff --git a/src/ClassResult/ClassicResult.js b/src/ClassicResult/ClassicResult.js
similarity index 99%
rename from src/ClassResult/ClassicResult.js
rename to src/ClassicResult/ClassicResult.js
index 72683134..47595fcb 100644
--- a/src/ClassResult/ClassicResult.js
+++ b/src/ClassicResult/ClassicResult.js
@@ -1,4 +1,4 @@
-import { createClassicSome, createClassicNone } from '../ClassOption/ClassicOption.js';
+import { createClassicSome, createClassicNone } from '../ClassicOption/ClassicOption.js';
 
 /* eslint-enable valid-jsdoc */
 
diff --git a/src/ClassResult/compat.ts b/src/ClassicResult/compat.ts
similarity index 100%
rename from src/ClassResult/compat.ts
rename to src/ClassicResult/compat.ts
diff --git a/src/ClassicResult/index.ts b/src/ClassicResult/index.ts
new file mode 100644
index 00000000..a433ab99
--- /dev/null
+++ b/src/ClassicResult/index.ts
@@ -0,0 +1,20 @@
+export {
+    type ClassicTryTransformFn,
+    type ClassicTryRecoverFromErrorFn,
+    ClassicResultBase,
+    type ClassicResult,
+    createClassicOk,
+    createClassicErr,
+    ClassicOkConstructor,
+    ClassicErrConstructor,
+    type ClassicTryTransformFn as FlatmapOkFn,
+    type ClassicTryRecoverFromErrorFn as FlatmapErrFn,
+    ClassicResultBase as ResultBase,
+    type ClassicResult as Result,
+    createClassicOk as createOk,
+    createClassicErr as createErr,
+    ClassicOkConstructor as Ok,
+    ClassicErrConstructor as Err,
+} from './ClassicResult.js';
+
+export { compatToPlainResult, compatToClassicResult } from './compat.js';
diff --git a/src/Option.ts b/src/Option.ts
index a87fa8f0..7905908b 100644
--- a/src/Option.ts
+++ b/src/Option.ts
@@ -12,6 +12,6 @@ export {
     createClassicNone as createNone,
     ClassicSomeConstructor as Some,
     ClassicNoneConstructor as None,
-} from './ClassOption/ClassicOption.js';
-
-export { compatToClassicOption, compatToPlainOption } from './ClassOption/compat.js';
+    compatToClassicOption,
+    compatToPlainOption,
+} from './ClassicOption/index.js';
diff --git a/src/PlainResult/fromPromiseSettledResult.ts b/src/PlainResult/fromPromiseSettledResult.ts
deleted file mode 100644
index e4f144c7..00000000
--- a/src/PlainResult/fromPromiseSettledResult.ts
+++ /dev/null
@@ -1,27 +0,0 @@
-import { type Result, createOk, createErr } from './Result.js';
-
-/**
- *  Convert {@link PromiseSettledResult<T>} returned by {@link Promise.allSettled} to {@link Result}
- */
-export function fromPromiseSettledResultToResult<T>(
-    input: PromiseSettledResult<T>
-): Result<T, unknown> {
-    const status = input.status;
-    switch (status) {
-        case 'fulfilled': {
-            const value = input.value;
-            const ok = createOk(value);
-            return ok;
-        }
-        case 'rejected': {
-            const reason = input.reason;
-            const err = createErr(reason);
-            return err;
-        }
-        default: {
-            const statusStr = String(status);
-            const message = `\`PromiseSettledResult.status=${statusStr}\` is not supported`;
-            throw new TypeError(message);
-        }
-    }
-}
diff --git a/src/Result.ts b/src/Result.ts
index 4827f826..2f0e7e36 100644
--- a/src/Result.ts
+++ b/src/Result.ts
@@ -12,6 +12,6 @@ export {
     createClassicErr as createErr,
     ClassicOkConstructor as Ok,
     ClassicErrConstructor as Err,
-} from './ClassResult/ClassicResult.js';
-
-export { compatToClassicResult, compatToPlainResult } from './ClassResult/compat.js';
+    compatToClassicResult,
+    compatToPlainResult,
+} from './ClassicResult/index.js';
diff --git a/tools/pkg_files.json b/tools/pkg_files.json
index 6959c45b..b0ab8b0a 100644
--- a/tools/pkg_files.json
+++ b/tools/pkg_files.json
@@ -3,14 +3,18 @@
     "CHANGELOG_OLD.md": null,
     "LICENSE.MIT": null,
     "README.md": null,
-    "cjs/ClassOption/ClassicOption.d.cts": null,
-    "cjs/ClassOption/ClassicOption.cjs": null,
-    "cjs/ClassOption/compat.d.cts": null,
-    "cjs/ClassOption/compat.cjs": null,
-    "cjs/ClassResult/ClassicResult.d.cts": null,
-    "cjs/ClassResult/ClassicResult.cjs": null,
-    "cjs/ClassResult/compat.d.cts": null,
-    "cjs/ClassResult/compat.cjs": null,
+    "cjs/ClassicOption/ClassicOption.d.cts": null,
+    "cjs/ClassicOption/ClassicOption.cjs": null,
+    "cjs/ClassicOption/index.d.cts": null,
+    "cjs/ClassicOption/index.cjs": null,
+    "cjs/ClassicOption/compat.d.cts": null,
+    "cjs/ClassicOption/compat.cjs": null,
+    "cjs/ClassicResult/ClassicResult.d.cts": null,
+    "cjs/ClassicResult/ClassicResult.cjs": null,
+    "cjs/ClassicResult/index.d.cts": null,
+    "cjs/ClassicResult/index.cjs": null,
+    "cjs/ClassicResult/compat.d.cts": null,
+    "cjs/ClassicResult/compat.cjs": null,
     "cjs/internal/assert.d.cts": null,
     "cjs/internal/assert.cjs": null,
     "cjs/internal/ErrorMessage.d.cts": null,
@@ -195,8 +199,6 @@
     "cjs/PlainResult/expect.cjs": null,
     "cjs/PlainResult/flatten.d.cts": null,
     "cjs/PlainResult/flatten.cjs": null,
-    "cjs/PlainResult/fromPromiseSettledResult.d.cts": null,
-    "cjs/PlainResult/fromPromiseSettledResult.cjs": null,
     "cjs/PlainResult/index.d.cts": null,
     "cjs/PlainResult/index.cjs": null,
     "cjs/PlainResult/inspect.d.cts": null,
@@ -292,6 +294,7 @@
     "cjs/index.d.cts": null,
     "cjs/index.cjs": null,
     "docs/idiom/express_progress.md": null,
+    "docs/idiom/from_promise_settled_result.md": null,
     "docs/idiom/README.md": null,
     "docs/deprecated_apis.md": null,
     "docs/how_to_import.md": null,
@@ -299,14 +302,18 @@
     "docs/public_api_list.md": null,
     "docs/README.md": null,
     "docs/wrapper_objects.md": null,
-    "esm/ClassOption/ClassicOption.d.ts": null,
-    "esm/ClassOption/ClassicOption.js": null,
-    "esm/ClassOption/compat.d.ts": null,
-    "esm/ClassOption/compat.js": null,
-    "esm/ClassResult/ClassicResult.d.ts": null,
-    "esm/ClassResult/ClassicResult.js": null,
-    "esm/ClassResult/compat.d.ts": null,
-    "esm/ClassResult/compat.js": null,
+    "esm/ClassicOption/ClassicOption.d.ts": null,
+    "esm/ClassicOption/ClassicOption.js": null,
+    "esm/ClassicOption/index.d.ts": null,
+    "esm/ClassicOption/index.js": null,
+    "esm/ClassicOption/compat.d.ts": null,
+    "esm/ClassicOption/compat.js": null,
+    "esm/ClassicResult/ClassicResult.d.ts": null,
+    "esm/ClassicResult/ClassicResult.js": null,
+    "esm/ClassicResult/index.d.ts": null,
+    "esm/ClassicResult/index.js": null,
+    "esm/ClassicResult/compat.d.ts": null,
+    "esm/ClassicResult/compat.js": null,
     "esm/internal/assert.d.ts": null,
     "esm/internal/assert.js": null,
     "esm/internal/ErrorMessage.d.ts": null,
@@ -491,8 +498,6 @@
     "esm/PlainResult/expect.js": null,
     "esm/PlainResult/flatten.d.ts": null,
     "esm/PlainResult/flatten.js": null,
-    "esm/PlainResult/fromPromiseSettledResult.d.ts": null,
-    "esm/PlainResult/fromPromiseSettledResult.js": null,
     "esm/PlainResult/index.d.ts": null,
     "esm/PlainResult/index.js": null,
     "esm/PlainResult/inspect.d.ts": null,
@@ -587,10 +592,12 @@
     "esm/Undefinable/xor.js": null,
     "esm/index.d.ts": null,
     "esm/index.js": null,
-    "lib/ClassOption/ClassicOption.d.ts": null,
-    "lib/ClassOption/compat.d.ts": null,
-    "lib/ClassResult/ClassicResult.d.ts": null,
-    "lib/ClassResult/compat.d.ts": null,
+    "lib/ClassicOption/ClassicOption.d.ts": null,
+    "lib/ClassicOption/index.d.ts": null,
+    "lib/ClassicOption/compat.d.ts": null,
+    "lib/ClassicResult/ClassicResult.d.ts": null,
+    "lib/ClassicResult/index.d.ts": null,
+    "lib/ClassicResult/compat.d.ts": null,
     "lib/internal/assert.d.ts": null,
     "lib/internal/ErrorMessage.d.ts": null,
     "lib/internal/Function.d.ts": null,
@@ -683,7 +690,6 @@
     "lib/PlainResult/equal.d.ts": null,
     "lib/PlainResult/expect.d.ts": null,
     "lib/PlainResult/flatten.d.ts": null,
-    "lib/PlainResult/fromPromiseSettledResult.d.ts": null,
     "lib/PlainResult/index.d.ts": null,
     "lib/PlainResult/inspect.d.ts": null,
     "lib/PlainResult/map.d.ts": null,
diff --git a/tools/public_api/table.mjs b/tools/public_api/table.mjs
index 5c0be297..9908eda2 100644
--- a/tools/public_api/table.mjs
+++ b/tools/public_api/table.mjs
@@ -547,11 +547,6 @@ export const apiTable = Object.freeze({
             'flattenForResult'
         ]
     },
-    'PlainResult/fromPromiseSettledResult': {
-        'exports': [
-            'fromPromiseSettledResultToResult'
-        ]
-    },
     'PlainResult/inspect': {
         'exports': [
             'inspectOkOfResult',
diff --git a/tsconfig.base.json b/tsconfig.base.json
index 18c2dabe..380ae9f2 100644
--- a/tsconfig.base.json
+++ b/tsconfig.base.json
@@ -9,7 +9,6 @@
         "lib": [                                   /* Specify library files to be included in the compilation. */
             "ES5",
             "ES2015.Promise",
-            "ES2020.Promise",
             "ES2022.Error",
         ],
         // "allowJs": true,                             /* Allow javascript files to be compiled. */


Test patch:
diff --git a/__tests__/ClassOption/inheritance.test.mjs b/__tests__/ClassOption/inheritance.test.mjs
deleted file mode 100644
index e9d20b73..00000000
--- a/__tests__/ClassOption/inheritance.test.mjs
+++ /dev/null
@@ -1,29 +0,0 @@
-import test from 'ava';
-
-import { createSome, createNone, OptionBase, Some, None } from '../../__dist/esm/Option.js';
-
-test('`Some<T>`', function (t) {
-    const option = createSome(1);
-    t.is(option instanceof OptionBase, true);
-});
-
-test('`None`', function (t) {
-    const option = createNone();
-    t.is(option instanceof OptionBase, true);
-});
-
-test('`Some<T> by Constructor`', function (t) {
-    const option = new Some(1);
-    t.true(option instanceof OptionBase, 'is instanceof OptionBase');
-    t.false(option instanceof Some, 'is not instanceof Some');
-});
-
-test('`None by Constructor`', function (t) {
-    const option = new None();
-    t.is(option instanceof OptionBase, true);
-    t.false(option instanceof None, 'is not instanceof None');
-});
-
-test('prototype should be frozen', (t) => {
-    t.true(Object.isFrozen(OptionBase.prototype));
-});
diff --git a/__tests__/ClassResult/inheritance.test.mjs b/__tests__/ClassResult/inheritance.test.mjs
deleted file mode 100644
index 7de1d4fe..00000000
--- a/__tests__/ClassResult/inheritance.test.mjs
+++ /dev/null
@@ -1,37 +0,0 @@
-import test from 'ava';
-
-import { createOk, createErr, ResultBase, Ok, Err } from '../../__dist/esm/Result.js';
-
-test('Ok<T> should be instanceof `ResultBase`', (t) => {
-    const result = createOk(1);
-    t.true(result instanceof ResultBase);
-});
-
-test('Err<E> should be instanceof `ResultBase`', (t) => {
-    const result = createErr(2);
-    t.true(result instanceof ResultBase);
-});
-
-test('Ok<T> by Constructor should be instanceof `ResultBase`', (t) => {
-    const result = new Ok(1);
-    t.true(result instanceof ResultBase);
-});
-
-test('Err<E> by Constructor should be instanceof `ResultBase`', (t) => {
-    const result = new Err(2);
-    t.true(result instanceof ResultBase);
-});
-
-test('Ok<T> by Constructor should NOT be instanceof `Ok`', (t) => {
-    const result = new Ok(1);
-    t.false(result instanceof Ok);
-});
-
-test('Err<E> by Constructor should NOT be instanceof `Err`', (t) => {
-    const result = new Err(2);
-    t.false(result instanceof Err);
-});
-
-test('prototype should be frozen', (t) => {
-    t.true(Object.isFrozen(ResultBase.prototype));
-});
diff --git a/__tests__/ClassOption/and.test.mjs b/__tests__/ClassicOption/and.test.mjs
similarity index 57%
rename from __tests__/ClassOption/and.test.mjs
rename to __tests__/ClassicOption/and.test.mjs
index 5204f6c6..08095cb8 100644
--- a/__tests__/ClassOption/and.test.mjs
+++ b/__tests__/ClassicOption/and.test.mjs
@@ -1,31 +1,34 @@
 import test from 'ava';
 
-import { createSome, createNone } from '../../__dist/esm/Option.js';
+import {
+    createClassicSome,
+    createClassicNone,
+} from '../../__dist/esm/ClassicOption/ClassicOption.js';
 
 test('self is `None`, param is `Some<T>`', function (t) {
-    const none = createNone();
-    const option = none.and(createSome(1));
+    const none = createClassicNone();
+    const option = none.and(createClassicSome(1));
     t.is(option.isNone, true);
 });
 
 test('self is `None`, param is `None`', function (t) {
-    const none = createNone();
-    const option = none.and(createNone());
+    const none = createClassicNone();
+    const option = none.and(createClassicNone());
     t.is(option.isNone, true, 'the returned value shoule be `None`');
 });
 
 test('self is `Some<T>`, param is `Some<T>`', function (t) {
     const EXPECTED = '1';
 
-    const some = createSome(1);
-    const option = some.and(createSome(EXPECTED));
+    const some = createClassicSome(1);
+    const option = some.and(createClassicSome(EXPECTED));
     t.is(option.isSome, true, 'the returned value shoule be `Some<T>`: 1');
     t.is(option.unwrap(), EXPECTED, 'the returned value shoule be `Some<T>`: 2');
 });
 
 test('self is `Some<T>`, param is `None`', function (t) {
-    const some = createSome(1);
-    const option = some.and(createNone());
+    const some = createClassicSome(1);
+    const option = some.and(createClassicNone());
 
     t.is(option.isNone, true, 'the returned value shoule be `None`');
 });
diff --git a/__tests__/ClassOption/compat.test.mjs b/__tests__/ClassicOption/compat.test.mjs
similarity index 90%
rename from __tests__/ClassOption/compat.test.mjs
rename to __tests__/ClassicOption/compat.test.mjs
index d3a0912e..b2816bec 100644
--- a/__tests__/ClassOption/compat.test.mjs
+++ b/__tests__/ClassicOption/compat.test.mjs
@@ -3,11 +3,11 @@ import test from 'ava';
 import { createSome, createNone, isSome, isNone } from '../../__dist/esm/PlainOption/Option.js';
 import { unwrapOption } from '../../__dist/esm/PlainOption/unwrap.js';
 import {
-    createSome as createClassicSome,
-    createNone as createClassicNone,
+    createClassicSome,
+    createClassicNone,
     compatToClassicOption,
     compatToPlainOption,
-} from '../../__dist/esm/Option.js';
+} from '../../__dist/esm/ClassicOption/index.js';
 
 test(`input is Plain's Some`, (t) => {
     const expected = Math.random();
diff --git a/__tests__/ClassOption/create.test.mjs b/__tests__/ClassicOption/create.test.mjs
similarity index 85%
rename from __tests__/ClassOption/create.test.mjs
rename to __tests__/ClassicOption/create.test.mjs
index 06dcb772..b024d237 100644
--- a/__tests__/ClassOption/create.test.mjs
+++ b/__tests__/ClassicOption/create.test.mjs
@@ -1,6 +1,9 @@
 import test from 'ava';
 
-import { createSome, createNone } from '../../__dist/esm/Option.js';
+import {
+    createClassicSome,
+    createClassicNone,
+} from '../../__dist/esm/ClassicOption/ClassicOption.js';
 
 import {
     primitiveVal,
@@ -22,7 +25,7 @@ param.forEach(function (value) {
     const label = 'type: ' + type + ', value: `' + String(value) + '`';
 
     test('`Some<T>`: ' + label, function (t) {
-        const option = createSome(value);
+        const option = createClassicSome(value);
 
         t.is(option.isSome, true, 'should be `Some<T>`');
         t.is(option.isNone, false, 'should not be `None`');
@@ -33,7 +36,7 @@ param.forEach(function (value) {
 });
 
 test('`None`', function (t) {
-    const option = createNone();
+    const option = createClassicNone();
     t.is(option.isNone, true, 'should be `None`');
     t.is(option.isSome, false, 'should not be `Some<T>`');
     t.is(option.isSome, false, '`isSome` should be expected');
diff --git a/__tests__/ClassOption/drop.test.mjs b/__tests__/ClassicOption/drop.test.mjs
similarity index 59%
rename from __tests__/ClassOption/drop.test.mjs
rename to __tests__/ClassicOption/drop.test.mjs
index 434fbd63..851153a1 100644
--- a/__tests__/ClassOption/drop.test.mjs
+++ b/__tests__/ClassicOption/drop.test.mjs
@@ -1,16 +1,19 @@
 import test from 'ava';
 
-import { createSome, createNone } from '../../__dist/esm/Option.js';
+import {
+    createClassicSome,
+    createClassicNone,
+} from '../../__dist/esm/ClassicOption/ClassicOption.js';
 
 test('drop `Some<T>`', function (t) {
-    const option = createSome(1);
+    const option = createClassicSome(1);
     option.drop();
 
     t.is(option.toJSON().value, null, 'the inner should be freed');
 });
 
 test('drop `None`', function (t) {
-    const option = createNone();
+    const option = createClassicNone();
     option.drop();
 
     t.is(option.toJSON().value, null, 'the inner should be freed');
diff --git a/__tests__/ClassOption/drop_with_destructor.test.mjs b/__tests__/ClassicOption/drop_with_destructor.test.mjs
similarity index 74%
rename from __tests__/ClassOption/drop_with_destructor.test.mjs
rename to __tests__/ClassicOption/drop_with_destructor.test.mjs
index 57705e21..e8e0d7c7 100644
--- a/__tests__/ClassOption/drop_with_destructor.test.mjs
+++ b/__tests__/ClassicOption/drop_with_destructor.test.mjs
@@ -1,6 +1,9 @@
 import test from 'ava';
 
-import { createSome, createNone } from '../../__dist/esm/Option.js';
+import {
+    createClassicSome,
+    createClassicNone,
+} from '../../__dist/esm/ClassicOption/ClassicOption.js';
 
 test('Some<T>', function (t) {
     t.plan(3);
@@ -11,7 +14,7 @@ test('Some<T>', function (t) {
         t.is(v, EXPECTED, 'should be called with the argument');
     }
 
-    const option = createSome(EXPECTED);
+    const option = createClassicSome(EXPECTED);
     option.drop(destructor);
     t.is(option.toJSON().value, null, 'the inner should be freed');
 });
@@ -21,7 +24,7 @@ test('None', function (t) {
         t.fail('should not be called with the destructor');
     }
 
-    const option = createNone();
+    const option = createClassicNone();
     option.drop(destructor);
     t.is(option.toJSON().value, null, 'the inner should be freed');
 });
diff --git a/__tests__/ClassOption/expect.test.mjs b/__tests__/ClassicOption/expect.test.mjs
similarity index 66%
rename from __tests__/ClassOption/expect.test.mjs
rename to __tests__/ClassicOption/expect.test.mjs
index a723635a..1fcda83d 100644
--- a/__tests__/ClassOption/expect.test.mjs
+++ b/__tests__/ClassicOption/expect.test.mjs
@@ -1,17 +1,20 @@
 import test from 'ava';
 
-import { createSome, createNone } from '../../__dist/esm/Option.js';
+import {
+    createClassicSome,
+    createClassicNone,
+} from '../../__dist/esm/ClassicOption/ClassicOption.js';
 
 test('unwrap `Some<T>`', function (t) {
     const EXPECTED = 1;
-    const option = createSome(EXPECTED);
+    const option = createClassicSome(EXPECTED);
     t.is(option.expect(), EXPECTED, 'should get the inner');
 });
 
 test('unwrap `None`', function (t) {
     const EXPECTED = 'barfoo';
 
-    const none = createNone();
+    const none = createClassicNone();
     t.throws(
         () => {
             none.expect(EXPECTED);
diff --git a/__tests__/ClassOption/flatmap.test.mjs b/__tests__/ClassicOption/flatmap.test.mjs
similarity index 75%
rename from __tests__/ClassOption/flatmap.test.mjs
rename to __tests__/ClassicOption/flatmap.test.mjs
index a0c01318..72fb66be 100644
--- a/__tests__/ClassOption/flatmap.test.mjs
+++ b/__tests__/ClassicOption/flatmap.test.mjs
@@ -1,9 +1,12 @@
 import test from 'ava';
 
-import { createSome, createNone } from '../../__dist/esm/Option.js';
+import {
+    createClassicSome,
+    createClassicNone,
+} from '../../__dist/esm/ClassicOption/ClassicOption.js';
 
 test('self is `None`', function (t) {
-    const none = createNone();
+    const none = createClassicNone();
     const option = none.flatMap(function () {
         t.fail('the passed function should not be called');
         return undefined;
@@ -12,10 +15,10 @@ test('self is `None`', function (t) {
 });
 
 test('self is `Some<T>`, callback returns `None`', function (t) {
-    const some = createSome(1);
+    const some = createClassicSome(1);
 
     const option = some.flatMap(function () {
-        return createNone();
+        return createClassicNone();
     });
 
     t.is(option.isNone, true);
@@ -23,18 +26,18 @@ test('self is `Some<T>`, callback returns `None`', function (t) {
 
 test('self is `Some<T>`, callback returns `Some<T>`', function (t) {
     const EXPECTED = '1';
-    const some = createSome(1);
+    const some = createClassicSome(1);
 
     const option = some.flatMap(function (val) {
         t.is(val !== EXPECTED, true);
-        return createSome(EXPECTED);
+        return createClassicSome(EXPECTED);
     });
     t.is(option.isSome, true);
     t.is(option.unwrap(), EXPECTED);
 });
 
 test("self is `Some<T>`, `fn` don't returns `Option<T>`", function (t) {
-    const some = createSome(1);
+    const some = createClassicSome(1);
     t.throws(
         () => {
             some.flatMap(function (val) {
diff --git a/__tests__/ClassicOption/inheritance.test.mjs b/__tests__/ClassicOption/inheritance.test.mjs
new file mode 100644
index 00000000..14bfacb0
--- /dev/null
+++ b/__tests__/ClassicOption/inheritance.test.mjs
@@ -0,0 +1,35 @@
+import test from 'ava';
+
+import {
+    createClassicSome,
+    createClassicNone,
+    ClassicOptionBase,
+    ClassicSomeConstructor as Some,
+    ClassicNoneConstructor as None,
+} from '../../__dist/esm/ClassicOption/ClassicOption.js';
+
+test('`Some<T>`', function (t) {
+    const option = createClassicSome(1);
+    t.is(option instanceof ClassicOptionBase, true);
+});
+
+test('`None`', function (t) {
+    const option = createClassicNone();
+    t.is(option instanceof ClassicOptionBase, true);
+});
+
+test('`Some<T> by Constructor`', function (t) {
+    const option = new Some(1);
+    t.true(option instanceof ClassicOptionBase, 'is instanceof ClassicOptionBase');
+    t.false(option instanceof Some, 'is not instanceof Some');
+});
+
+test('`None by Constructor`', function (t) {
+    const option = new None();
+    t.is(option instanceof ClassicOptionBase, true);
+    t.false(option instanceof None, 'is not instanceof None');
+});
+
+test('prototype should be frozen', (t) => {
+    t.true(Object.isFrozen(ClassicOptionBase.prototype));
+});
diff --git a/__tests__/ClassOption/initialize.test.mjs b/__tests__/ClassicOption/initialize.test.mjs
similarity index 89%
rename from __tests__/ClassOption/initialize.test.mjs
rename to __tests__/ClassicOption/initialize.test.mjs
index 4b80045b..9637af77 100644
--- a/__tests__/ClassOption/initialize.test.mjs
+++ b/__tests__/ClassicOption/initialize.test.mjs
@@ -1,6 +1,11 @@
 import test from 'ava';
 
-import { createSome, createNone, Some, None } from '../../__dist/esm/Option.js';
+import {
+    createClassicSome,
+    createClassicNone,
+    ClassicSomeConstructor as Some,
+    ClassicNoneConstructor as None,
+} from '../../__dist/esm/ClassicOption/ClassicOption.js';
 
 import {
     primitiveVal,
@@ -24,7 +29,7 @@ param.forEach(function (value) {
         const label = 'Some(T): type: ' + type + ', value: `' + String(value) + '`';
 
         test(label, function (t) {
-            const option = createSome(value);
+            const option = createClassicSome(value);
 
             t.is(option.isSome, true, 'should be `Some<T>`');
             t.is(option.isNone, false, 'should not be `None`');
@@ -52,7 +57,7 @@ param.forEach(function (value) {
 });
 
 test('`None`', function (t) {
-    const option = createNone();
+    const option = createClassicNone();
 
     t.is(option.isNone, true, 'should be `None`');
     t.is(option.isSome, false, 'should not be `Some<T>`');
diff --git a/__tests__/ClassOption/json.test.mjs b/__tests__/ClassicOption/json.test.mjs
similarity index 90%
rename from __tests__/ClassOption/json.test.mjs
rename to __tests__/ClassicOption/json.test.mjs
index 41104d55..4cdd5877 100644
--- a/__tests__/ClassOption/json.test.mjs
+++ b/__tests__/ClassicOption/json.test.mjs
@@ -2,7 +2,10 @@
 
 import test from 'ava';
 
-import { createSome, createNone } from '../../__dist/esm/Option.js';
+import {
+    createClassicSome,
+    createClassicNone,
+} from '../../__dist/esm/ClassicOption/ClassicOption.js';
 
 import {
     primitiveVal,
@@ -20,7 +23,7 @@ primitiveVal.forEach(function (value) {
     test(label, function (t) {
         t.plan(4);
 
-        const raw = createSome(value);
+        const raw = createClassicSome(value);
         const result = JSON.parse(JSON.stringify(raw));
 
         ['is_some', 'value'].forEach(function (key) {
@@ -39,7 +42,7 @@ objectVal.forEach(function (value) {
     test(label, function (t) {
         t.plan(4);
 
-        const raw = createSome(value);
+        const raw = createClassicSome(value);
         const result = JSON.parse(JSON.stringify(raw));
 
         ['is_some', 'value'].forEach(function (key) {
@@ -60,7 +63,7 @@ nonSerializableObjectVal.forEach(function (value) {
     test(label, function (t) {
         t.plan(4);
 
-        const raw = createSome(value);
+        const raw = createClassicSome(value);
         const result = JSON.parse(JSON.stringify(raw));
 
         ['is_some', 'value'].forEach(function (key) {
@@ -81,7 +84,7 @@ funcVal.forEach(function (value) {
     test(label, function (t) {
         t.plan(3);
 
-        const raw = createSome(value);
+        const raw = createClassicSome(value);
         const result = JSON.parse(JSON.stringify(raw));
 
         ['is_some'].forEach(function (key) {
@@ -102,7 +105,7 @@ symbolVal.forEach(function (value) {
     test(label, function (t) {
         t.plan(3);
 
-        const raw = createSome(value);
+        const raw = createClassicSome(value);
         const result = JSON.parse(JSON.stringify(raw));
 
         ['is_some'].forEach(function (key) {
@@ -122,7 +125,7 @@ undefinedVal.forEach(function (value) {
     test(label, function (t) {
         t.plan(3);
 
-        const raw = createSome(value);
+        const raw = createClassicSome(value);
         const result = JSON.parse(JSON.stringify(raw));
 
         ['is_some'].forEach(function (key) {
@@ -137,7 +140,7 @@ undefinedVal.forEach(function (value) {
 test('None', function (t) {
     t.plan(3);
 
-    const raw = createNone();
+    const raw = createClassicNone();
     const result = JSON.parse(JSON.stringify(raw));
 
     ['is_some'].forEach(function (key) {
diff --git a/__tests__/ClassOption/map.test.mjs b/__tests__/ClassicOption/map.test.mjs
similarity index 72%
rename from __tests__/ClassOption/map.test.mjs
rename to __tests__/ClassicOption/map.test.mjs
index 5dabf386..a28495c6 100644
--- a/__tests__/ClassOption/map.test.mjs
+++ b/__tests__/ClassicOption/map.test.mjs
@@ -1,9 +1,12 @@
 import test from 'ava';
 
-import { createSome, createNone } from '../../__dist/esm/Option.js';
+import {
+    createClassicSome,
+    createClassicNone,
+} from '../../__dist/esm/ClassicOption/ClassicOption.js';
 
 test('self is `None`', function (t) {
-    const none = createNone();
+    const none = createClassicNone();
     const option = none.map(function (v) {
         t.fail('the passed function should not be called');
         return v;
@@ -16,7 +19,7 @@ test('self is `None`', function (t) {
 test('self is `Some<T>`', function (t) {
     const EXPECTED = '1';
 
-    const some = createSome(1);
+    const some = createClassicSome(1);
     const option = some.map(function (val) {
         t.not(val, EXPECTED);
         return EXPECTED;
diff --git a/__tests__/ClassOption/map_or.test.mjs b/__tests__/ClassicOption/map_or.test.mjs
similarity index 73%
rename from __tests__/ClassOption/map_or.test.mjs
rename to __tests__/ClassicOption/map_or.test.mjs
index ae321be7..3c3b156d 100644
--- a/__tests__/ClassOption/map_or.test.mjs
+++ b/__tests__/ClassicOption/map_or.test.mjs
@@ -1,11 +1,14 @@
 import test from 'ava';
 
-import { createSome, createNone } from '../../__dist/esm/Option.js';
+import {
+    createClassicSome,
+    createClassicNone,
+} from '../../__dist/esm/ClassicOption/ClassicOption.js';
 
 test('self is `None`', function (t) {
     const EXPECTED = 1;
 
-    const none = createNone();
+    const none = createClassicNone();
     const result = none.mapOr(EXPECTED, function () {
         t.pass('the passed function should not be called');
     });
@@ -19,7 +22,7 @@ test('self is `Some<T>`', function (t) {
     const EXPECTED = 1;
     const DEFAULT = 2;
 
-    const some = createSome('bar');
+    const some = createClassicSome('bar');
     const result = some.mapOr(DEFAULT, function (val) {
         t.not(val, EXPECTED);
         return EXPECTED;
diff --git a/__tests__/ClassOption/map_or_else.test.mjs b/__tests__/ClassicOption/map_or_else.test.mjs
similarity index 82%
rename from __tests__/ClassOption/map_or_else.test.mjs
rename to __tests__/ClassicOption/map_or_else.test.mjs
index 970a5b65..be52f671 100644
--- a/__tests__/ClassOption/map_or_else.test.mjs
+++ b/__tests__/ClassicOption/map_or_else.test.mjs
@@ -1,13 +1,16 @@
 import test from 'ava';
 
-import { createSome, createNone } from '../../__dist/esm/Option.js';
+import {
+    createClassicSome,
+    createClassicNone,
+} from '../../__dist/esm/ClassicOption/ClassicOption.js';
 
 test('self is `None`', function (t) {
     t.plan(2);
 
     const EXPECTED = 1;
 
-    const none = createNone();
+    const none = createClassicNone();
     const result = none.mapOrElse(
         function defaultFn() {
             t.pass('`defaultFn` function should be called');
@@ -28,7 +31,7 @@ test('self is `Some<T>`', function (t) {
     const DEFAULT = 2;
     t.not(EXPECTED, DEFAULT);
 
-    const some = createSome('bar');
+    const some = createClassicSome('bar');
     const result = some.mapOrElse(
         function defaultFn() {
             t.fail('`defaultFn` function should not be called');
diff --git a/__tests__/ClassOption/or.test.mjs b/__tests__/ClassicOption/or.test.mjs
similarity index 64%
rename from __tests__/ClassOption/or.test.mjs
rename to __tests__/ClassicOption/or.test.mjs
index 3dfb8486..39629f62 100644
--- a/__tests__/ClassOption/or.test.mjs
+++ b/__tests__/ClassicOption/or.test.mjs
@@ -1,26 +1,29 @@
 import test from 'ava';
 
-import { createSome, createNone } from '../../__dist/esm/Option.js';
+import {
+    createClassicSome,
+    createClassicNone,
+} from '../../__dist/esm/ClassicOption/ClassicOption.js';
 
 test('self is `None`, param is `Some<T>`', function (t) {
     const EXPECTED = 1;
-    const none = createNone();
-    const option = none.or(createSome(EXPECTED));
+    const none = createClassicNone();
+    const option = none.or(createClassicSome(EXPECTED));
     t.is(option.isSome, true, 'the returned value shoule be `Some<T>`: 1');
     t.is(option.unwrap(), EXPECTED, 'the returned value shoule be `Some<T>`: 2');
 });
 
 test('self is `None`, param is `None`', function (t) {
-    const none = createNone();
-    const option = none.or(createNone());
+    const none = createClassicNone();
+    const option = none.or(createClassicNone());
     t.is(option.isNone, true, 'the returned value shoule be `None`');
 });
 
 test('self is `Some<T>`, param is `Some<T>`', function (t) {
     const EXPECTED = 1;
 
-    const some = createSome(EXPECTED);
-    const option = some.or(createSome(3));
+    const some = createClassicSome(EXPECTED);
+    const option = some.or(createClassicSome(3));
 
     t.is(option.isSome, true, 'the returned value shoule be `Some<T>`: 1');
     t.is(option.unwrap(), EXPECTED, 'the returned value shoule be `Some<T>`: 2');
@@ -28,8 +31,8 @@ test('self is `Some<T>`, param is `Some<T>`', function (t) {
 
 test('self is `Some<T>`, param is `None`', function (t) {
     const EXPECTED = 1;
-    const some = createSome(EXPECTED);
-    const option = some.or(createNone());
+    const some = createClassicSome(EXPECTED);
+    const option = some.or(createClassicNone());
     t.is(option.isSome, true, 'the returned value shoule be `Some<T>`: 1');
     t.is(option.unwrap(), EXPECTED, 'the returned value shoule be `Some<T>`: 2');
 });
diff --git a/__tests__/ClassOption/or_else.test.mjs b/__tests__/ClassicOption/or_else.test.mjs
similarity index 72%
rename from __tests__/ClassOption/or_else.test.mjs
rename to __tests__/ClassicOption/or_else.test.mjs
index 155e52ce..84e203c8 100644
--- a/__tests__/ClassOption/or_else.test.mjs
+++ b/__tests__/ClassicOption/or_else.test.mjs
@@ -1,12 +1,15 @@
 import test from 'ava';
 
-import { createSome, createNone } from '../../__dist/esm/Option.js';
+import {
+    createClassicSome,
+    createClassicNone,
+} from '../../__dist/esm/ClassicOption/ClassicOption.js';
 
 test('self is `None`, param returns `Some<T>`', function (t) {
     const EXPECTED = 1;
-    const none = createNone();
+    const none = createClassicNone();
     const option = none.orElse(function () {
-        return createSome(EXPECTED);
+        return createClassicSome(EXPECTED);
     });
 
     t.is(option.isSome, true);
@@ -14,16 +17,16 @@ test('self is `None`, param returns `Some<T>`', function (t) {
 });
 
 test('self is `None`, param returns `None`', function (t) {
-    const none = createNone();
+    const none = createClassicNone();
     const option = none.orElse(function () {
-        return createNone();
+        return createClassicNone();
     });
 
     t.is(option.isNone, true);
 });
 
 test("self is `None`, param don't return `Option<T>`", function (t) {
-    const none = createNone();
+    const none = createClassicNone();
 
     t.throws(
         () => {
@@ -40,10 +43,10 @@ test("self is `None`, param don't return `Option<T>`", function (t) {
 
 test('self is `Some<T>`, param returns `Some<T>`', function (t) {
     const EXPECTED = 1;
-    const some = createSome(EXPECTED);
+    const some = createClassicSome(EXPECTED);
     const option = some.orElse(function () {
         t.fail('shoule not call callback');
-        return createSome(3);
+        return createClassicSome(3);
     });
 
     t.is(option.isSome, true);
@@ -53,10 +56,10 @@ test('self is `Some<T>`, param returns `Some<T>`', function (t) {
 test('self is `Some<T>`, param returns `None`', function (t) {
     const EXPECTED = 1;
 
-    const some = createSome(EXPECTED);
+    const some = createClassicSome(EXPECTED);
     const option = some.orElse(function () {
         t.fail('shoule not call callback');
-        return createNone();
+        return createClassicNone();
     });
     t.is(option.isSome, true);
     t.is(option.unwrap(), EXPECTED);
diff --git a/__tests__/ClassOption/unwrap.test.mjs b/__tests__/ClassicOption/unwrap.test.mjs
similarity index 64%
rename from __tests__/ClassOption/unwrap.test.mjs
rename to __tests__/ClassicOption/unwrap.test.mjs
index 94b8c80f..5d22138e 100644
--- a/__tests__/ClassOption/unwrap.test.mjs
+++ b/__tests__/ClassicOption/unwrap.test.mjs
@@ -1,15 +1,18 @@
 import test from 'ava';
 
-import { createSome, createNone } from '../../__dist/esm/Option.js';
+import {
+    createClassicSome,
+    createClassicNone,
+} from '../../__dist/esm/ClassicOption/ClassicOption.js';
 
 test('unwrap `Some<T>`', function (t) {
     const EXPECTED = 1;
-    const option = createSome(EXPECTED);
+    const option = createClassicSome(EXPECTED);
     t.is(option.unwrap(), EXPECTED);
 });
 
 test('unwrap `None`', function (t) {
-    const none = createNone();
+    const none = createClassicNone();
     t.throws(
         () => {
             none.unwrap();
diff --git a/__tests__/ClassOption/unwrap_or.test.mjs b/__tests__/ClassicOption/unwrap_or.test.mjs
similarity index 66%
rename from __tests__/ClassOption/unwrap_or.test.mjs
rename to __tests__/ClassicOption/unwrap_or.test.mjs
index bb09fb81..e23bf28d 100644
--- a/__tests__/ClassOption/unwrap_or.test.mjs
+++ b/__tests__/ClassicOption/unwrap_or.test.mjs
@@ -1,11 +1,14 @@
 import test from 'ava';
 
-import { createSome, createNone } from '../../__dist/esm/Option.js';
+import {
+    createClassicSome,
+    createClassicNone,
+} from '../../__dist/esm/ClassicOption/ClassicOption.js';
 
 test('self is `None`', function (t) {
     const EXPECTED = 1;
 
-    const option = createNone();
+    const option = createClassicNone();
     const result = option.unwrapOr(EXPECTED);
     t.is(result, EXPECTED);
 });
@@ -16,7 +19,7 @@ test('self is `Some<T>`', function (t) {
 
     t.not(EXPECTED, DEFAULT);
 
-    const option = createSome(EXPECTED);
+    const option = createClassicSome(EXPECTED);
     const result = option.unwrapOr(DEFAULT);
     t.is(result, EXPECTED, 'shoule be the wrapped value');
 });
diff --git a/__tests__/ClassOption/unwrap_or_else.test.mjs b/__tests__/ClassicOption/unwrap_or_else.test.mjs
similarity index 72%
rename from __tests__/ClassOption/unwrap_or_else.test.mjs
rename to __tests__/ClassicOption/unwrap_or_else.test.mjs
index 445a1011..0a4faad4 100644
--- a/__tests__/ClassOption/unwrap_or_else.test.mjs
+++ b/__tests__/ClassicOption/unwrap_or_else.test.mjs
@@ -1,11 +1,14 @@
 import test from 'ava';
 
-import { createSome, createNone } from '../../__dist/esm/Option.js';
+import {
+    createClassicSome,
+    createClassicNone,
+} from '../../__dist/esm/ClassicOption/ClassicOption.js';
 
 test('self is `None`', function (t) {
     const EXPECTED = 1;
 
-    const option = createNone();
+    const option = createClassicNone();
     const result = option.unwrapOrElse(function () {
         return EXPECTED;
     });
@@ -18,7 +21,7 @@ test('self is `Some<T>`', function (t) {
 
     t.not(EXPECTED, DEFAULT);
 
-    const option = createSome(EXPECTED);
+    const option = createClassicSome(EXPECTED);
     const result = option.unwrapOrElse(function () {
         t.fail('shoule not call callback');
         return DEFAULT;
diff --git a/__tests__/ClassResult/and.test.mjs b/__tests__/ClassicResult/and.test.mjs
similarity index 70%
rename from __tests__/ClassResult/and.test.mjs
rename to __tests__/ClassicResult/and.test.mjs
index abf0ffe9..859bd09b 100644
--- a/__tests__/ClassResult/and.test.mjs
+++ b/__tests__/ClassicResult/and.test.mjs
@@ -1,6 +1,6 @@
 import test from 'ava';
 
-import { createOk, createErr } from '../../__dist/esm/Result.js';
+import { createClassicOk, createClassicErr } from '../../__dist/esm/ClassicResult/ClassicResult.js';
 
 const EXPECTED = Symbol('EXPECTED');
 const UNEXPECTED = Symbol('UNEXPECTED');
@@ -13,7 +13,7 @@ function toLabel(input) {
     }
 }
 
-const testcaseList = [[createOk(UNEXPECTED), createOk(EXPECTED)]];
+const testcaseList = [[createClassicOk(UNEXPECTED), createClassicOk(EXPECTED)]];
 for (const [lhs, rhs] of testcaseList) {
     test(`lhs: ${toLabel(lhs)}, rhs: ${toLabel(rhs)}`, (t) => {
         const result = lhs.and(rhs);
@@ -23,9 +23,9 @@ for (const [lhs, rhs] of testcaseList) {
 }
 
 const failureTestcaseList = [
-    [createOk(UNEXPECTED), createErr(EXPECTED)],
-    [createErr(EXPECTED), createOk(UNEXPECTED)],
-    [createErr(EXPECTED), createErr(UNEXPECTED)],
+    [createClassicOk(UNEXPECTED), createClassicErr(EXPECTED)],
+    [createClassicErr(EXPECTED), createClassicOk(UNEXPECTED)],
+    [createClassicErr(EXPECTED), createClassicErr(UNEXPECTED)],
 ];
 for (const [lhs, rhs] of failureTestcaseList) {
     test(`lhs: ${toLabel(lhs)}, rhs: ${toLabel(rhs)}`, (t) => {
diff --git a/__tests__/ClassResult/and_then.test.mjs b/__tests__/ClassicResult/and_then.test.mjs
similarity index 75%
rename from __tests__/ClassResult/and_then.test.mjs
rename to __tests__/ClassicResult/and_then.test.mjs
index 061982d7..773fc931 100644
--- a/__tests__/ClassResult/and_then.test.mjs
+++ b/__tests__/ClassicResult/and_then.test.mjs
@@ -1,6 +1,10 @@
 import test from 'ava';
 
-import { createOk, createErr, ResultBase } from '../../__dist/esm/Result.js';
+import {
+    createClassicOk,
+    createClassicErr,
+    ClassicResultBase,
+} from '../../__dist/esm/ClassicResult/ClassicResult.js';
 
 const ORIGIN = Symbol('ORIGIN');
 const EXPECTED = Symbol('EXPECTED');
@@ -10,10 +14,10 @@ test(`OK(T), return Ok(U)`, (t) => {
 
     const op = function (v) {
         t.is(v, ORIGIN, 'the argument of `op` should be the expected value');
-        return createOk(EXPECTED);
+        return createClassicOk(EXPECTED);
     };
 
-    const origin = createOk(ORIGIN);
+    const origin = createClassicOk(ORIGIN);
     const result = origin.andThen(op);
 
     t.is(result.isOk(), true, 'the returned value should be `Ok');
@@ -25,17 +29,17 @@ test(`Ok(T), return Err(F)`, (t) => {
 
     const op = function (v) {
         t.is(v, ORIGIN, 'the argument of `op` should be the expected value');
-        return createErr(EXPECTED);
+        return createClassicErr(EXPECTED);
     };
 
-    const origin = createOk(ORIGIN);
+    const origin = createClassicOk(ORIGIN);
     const result = origin.andThen(op);
 
     t.is(result.isErr(), true, 'the returned value should be `Err');
     t.is(result.unwrapErr(), EXPECTED);
 });
 
-const errTestcaseList = [createOk, createErr];
+const errTestcaseList = [createClassicOk, createClassicErr];
 for (const innerfn of errTestcaseList) {
     test(`Err(E), return ${innerfn.name}`, (t) => {
         t.plan(2);
@@ -45,7 +49,7 @@ for (const innerfn of errTestcaseList) {
             return innerfn(EXPECTED);
         };
 
-        const origin = createErr(ORIGIN);
+        const origin = createClassicErr(ORIGIN);
         const result = origin.andThen(op);
 
         t.is(result.isErr(), true, 'the returned value should be `Err');
@@ -56,11 +60,11 @@ for (const innerfn of errTestcaseList) {
 test('Ok(T): return non Result type', (t) => {
     t.plan(2);
 
-    const input = createOk(ORIGIN);
+    const input = createClassicOk(ORIGIN);
     t.throws(
         () => {
             input.andThen(function (v) {
-                t.false(v instanceof ResultBase);
+                t.false(v instanceof ClassicResultBase);
                 return v;
             });
         },
@@ -72,7 +76,7 @@ test('Ok(T): return non Result type', (t) => {
 });
 
 test('Err(E): return non Result type', (t) => {
-    const input = createErr(ORIGIN);
+    const input = createClassicErr(ORIGIN);
     t.notThrows(() => {
         input.andThen(function (v) {
             t.fail("don't call");
diff --git a/__tests__/ClassResult/compat.test.mjs b/__tests__/ClassicResult/compat.test.mjs
similarity index 92%
rename from __tests__/ClassResult/compat.test.mjs
rename to __tests__/ClassicResult/compat.test.mjs
index 29ae92bd..33b4d72f 100644
--- a/__tests__/ClassResult/compat.test.mjs
+++ b/__tests__/ClassicResult/compat.test.mjs
@@ -3,11 +3,11 @@ import test from 'ava';
 import { createOk, createErr, isOk, isErr } from '../../__dist/esm/PlainResult/Result.js';
 import { unwrapOkFromResult, unwrapErrFromResult } from '../../__dist/esm/PlainResult/unwrap.js';
 import {
-    createOk as createClassicOk,
-    createErr as createClassicErr,
+    createClassicOk,
+    createClassicErr,
     compatToClassicResult,
     compatToPlainResult,
-} from '../../__dist/esm/Result.js';
+} from '../../__dist/esm/ClassicResult/index.js';
 
 test(`input is Plain's Ok`, (t) => {
     const expected = Math.random();
diff --git a/__tests__/ClassResult/drop.test.mjs b/__tests__/ClassicResult/drop.test.mjs
similarity index 73%
rename from __tests__/ClassResult/drop.test.mjs
rename to __tests__/ClassicResult/drop.test.mjs
index b642458f..2cb45445 100644
--- a/__tests__/ClassResult/drop.test.mjs
+++ b/__tests__/ClassicResult/drop.test.mjs
@@ -1,6 +1,6 @@
 import test from 'ava';
 
-import { createOk, createErr } from '../../__dist/esm/Result.js';
+import { createClassicOk, createClassicErr } from '../../__dist/esm/ClassicResult/ClassicResult.js';
 
 const EXPECTED_OK = Symbol('expected_ok');
 const EXPECTED_ERR = Symbol('expected_err');
@@ -8,7 +8,7 @@ const EXPECTED_ERR = Symbol('expected_err');
 test('Ok<T>', (t) => {
     let ok;
     t.notThrows(() => {
-        ok = createOk(EXPECTED_OK);
+        ok = createClassicOk(EXPECTED_OK);
         ok.drop();
     }, 'is callable');
 
@@ -19,7 +19,7 @@ test('Ok<T>', (t) => {
 test('Err<E>', (t) => {
     let err;
     t.notThrows(() => {
-        err = createErr(EXPECTED_ERR);
+        err = createClassicErr(EXPECTED_ERR);
         err.drop();
     }, 'is callable');
 
diff --git a/__tests__/ClassResult/drop_with_destructor.test.mjs b/__tests__/ClassicResult/drop_with_destructor.test.mjs
similarity index 84%
rename from __tests__/ClassResult/drop_with_destructor.test.mjs
rename to __tests__/ClassicResult/drop_with_destructor.test.mjs
index 8c1e9ce8..bbb55f23 100644
--- a/__tests__/ClassResult/drop_with_destructor.test.mjs
+++ b/__tests__/ClassicResult/drop_with_destructor.test.mjs
@@ -1,6 +1,6 @@
 import test from 'ava';
 
-import { createOk, createErr } from '../../__dist/esm/Result.js';
+import { createClassicOk, createClassicErr } from '../../__dist/esm/ClassicResult/ClassicResult.js';
 
 const EXPECTED_OK = Symbol('expected_ok');
 const EXPECTED_ERR = Symbol('expected_err');
@@ -19,7 +19,7 @@ test('Ok<T>', (t) => {
         t.fail('call errDestructor');
     }
 
-    const result = createOk(EXPECTED_OK);
+    const result = createClassicOk(EXPECTED_OK);
     result.drop(okDestructor, errDestructor);
 
     t.is(args, EXPECTED_OK, 'should be called with the expected');
@@ -41,7 +41,7 @@ test('Err<E>', (t) => {
         t.pass('call errDestructor');
     }
 
-    const result = createErr(EXPECTED_ERR);
+    const result = createClassicErr(EXPECTED_ERR);
     result.drop(okDestructor, errDestructor);
 
     t.is(args, EXPECTED_ERR, 'should be called with the expected');
diff --git a/__tests__/ClassResult/err.test.mjs b/__tests__/ClassicResult/err.test.mjs
similarity index 64%
rename from __tests__/ClassResult/err.test.mjs
rename to __tests__/ClassicResult/err.test.mjs
index 4019d844..28bad14e 100644
--- a/__tests__/ClassResult/err.test.mjs
+++ b/__tests__/ClassicResult/err.test.mjs
@@ -1,17 +1,17 @@
 import test from 'ava';
 
-import { createOk, createErr } from '../../__dist/esm/Result.js';
+import { createClassicOk, createClassicErr } from '../../__dist/esm/ClassicResult/ClassicResult.js';
 
 const EXPECTED_OK = 'expected_ok';
 const EXPECTED_ERR = 'expected_err';
 
 test('Ok<T>', function (t) {
-    const ok = createOk(EXPECTED_OK);
+    const ok = createClassicOk(EXPECTED_OK);
     t.is(ok.err().isNone, true, 'return `None<E>`');
 });
 
 test('Err<E>', function (t) {
-    const err = createErr(EXPECTED_ERR);
+    const err = createClassicErr(EXPECTED_ERR);
 
     t.is(err.err().isSome, true, 'return `Some<E>`');
     t.is(err.err().unwrap(), EXPECTED_ERR, 'the inner value is expected');
diff --git a/__tests__/ClassResult/expect.test.mjs b/__tests__/ClassicResult/expect.test.mjs
similarity index 68%
rename from __tests__/ClassResult/expect.test.mjs
rename to __tests__/ClassicResult/expect.test.mjs
index 07636ebe..c3c0bc53 100644
--- a/__tests__/ClassResult/expect.test.mjs
+++ b/__tests__/ClassicResult/expect.test.mjs
@@ -1,12 +1,12 @@
 import test from 'ava';
 
-import { createOk, createErr } from '../../__dist/esm/Result.js';
+import { createClassicOk, createClassicErr } from '../../__dist/esm/ClassicResult/ClassicResult.js';
 
 const EXPECTED_OK = 'expected_ok';
 const EXPECTED_ERR = 'expected_err';
 
 test('Ok<T>', function (t) {
-    const ok = createOk(EXPECTED_OK);
+    const ok = createClassicOk(EXPECTED_OK);
     t.is(ok.expect('not expected message'), EXPECTED_OK);
 });
 
@@ -15,7 +15,7 @@ test('Err<E>', function (t) {
 
     t.throws(
         () => {
-            const err = createErr(UNEXPECTED);
+            const err = createClassicErr(UNEXPECTED);
             err.expect(EXPECTED_ERR);
         },
         {
diff --git a/__tests__/ClassicResult/inheritance.test.mjs b/__tests__/ClassicResult/inheritance.test.mjs
new file mode 100644
index 00000000..b4bfc350
--- /dev/null
+++ b/__tests__/ClassicResult/inheritance.test.mjs
@@ -0,0 +1,43 @@
+import test from 'ava';
+
+import {
+    createClassicOk,
+    createClassicErr,
+    ClassicResultBase,
+    ClassicOkConstructor as Ok,
+    ClassicErrConstructor as Err,
+} from '../../__dist/esm/ClassicResult/ClassicResult.js';
+
+test('Ok<T> should be instanceof `ClassicResultBase`', (t) => {
+    const result = createClassicOk(1);
+    t.true(result instanceof ClassicResultBase);
+});
+
+test('Err<E> should be instanceof `ClassicResultBase`', (t) => {
+    const result = createClassicErr(2);
+    t.true(result instanceof ClassicResultBase);
+});
+
+test('Ok<T> by Constructor should be instanceof `ClassicResultBase`', (t) => {
+    const result = new Ok(1);
+    t.true(result instanceof ClassicResultBase);
+});
+
+test('Err<E> by Constructor should be instanceof `ClassicResultBase`', (t) => {
+    const result = new Err(2);
+    t.true(result instanceof ClassicResultBase);
+});
+
+test('Ok<T> by Constructor should NOT be instanceof `Ok`', (t) => {
+    const result = new Ok(1);
+    t.false(result instanceof Ok);
+});
+
+test('Err<E> by Constructor should NOT be instanceof `Err`', (t) => {
+    const result = new Err(2);
+    t.false(result instanceof Err);
+});
+
+test('prototype should be frozen', (t) => {
+    t.true(Object.isFrozen(ClassicResultBase.prototype));
+});
diff --git a/__tests__/ClassResult/initialize.test.mjs b/__tests__/ClassicResult/initialize.test.mjs
similarity index 90%
rename from __tests__/ClassResult/initialize.test.mjs
rename to __tests__/ClassicResult/initialize.test.mjs
index e3407d72..f1c8b95a 100644
--- a/__tests__/ClassResult/initialize.test.mjs
+++ b/__tests__/ClassicResult/initialize.test.mjs
@@ -1,6 +1,11 @@
 import test from 'ava';
 
-import { createOk, createErr, Ok, Err } from '../../__dist/esm/Result.js';
+import {
+    createClassicOk,
+    createClassicErr,
+    ClassicOkConstructor as Ok,
+    ClassicErrConstructor as Err,
+} from '../../__dist/esm/ClassicResult/ClassicResult.js';
 
 import {
     primitiveVal,
@@ -22,7 +27,7 @@ for (const value of param) {
     const type = typeof value;
     const label = 'OK<T>: type: ' + type + ', value: `' + String(value) + '`';
     test(label, (t) => {
-        const result = createOk(value);
+        const result = createClassicOk(value);
 
         t.is(Object.isSealed(result), true, 'should be sealed');
         t.is(result.isOk(), true, 'should be `Ok<T>`');
@@ -52,7 +57,7 @@ for (const value of param) {
     const type = typeof value;
     const label = 'Err<E>: type: ' + type + ', value: `' + String(value) + '`';
     test(label, (t) => {
-        const result = createErr(value);
+        const result = createClassicErr(value);
 
         t.is(Object.isSealed(result), true, 'should be sealed');
         t.is(result.isOk(), false, 'should be `Err<E>`');
diff --git a/__tests__/ClassResult/map.test.mjs b/__tests__/ClassicResult/map.test.mjs
similarity index 85%
rename from __tests__/ClassResult/map.test.mjs
rename to __tests__/ClassicResult/map.test.mjs
index adaf3690..67034019 100644
--- a/__tests__/ClassResult/map.test.mjs
+++ b/__tests__/ClassicResult/map.test.mjs
@@ -1,6 +1,6 @@
 import test from 'ava';
 
-import { createOk, createErr } from '../../__dist/esm/Result.js';
+import { createClassicOk, createClassicErr } from '../../__dist/esm/ClassicResult/ClassicResult.js';
 
 test('Ok<T>', (t) => {
     t.plan(6);
@@ -20,7 +20,7 @@ test('Ok<T>', (t) => {
     t.not(argument, ORIGIN);
     t.not(result, EXPECTED);
 
-    const original = createOk(ORIGIN);
+    const original = createClassicOk(ORIGIN);
     result = original.map(op);
 
     t.is(result.isOk(), true, 'the returned value should be `Ok<U, E>');
@@ -42,7 +42,7 @@ test('Err<E>', (t) => {
 
     t.not(ORIGIN, NOT_EXPECTED);
 
-    const original = createErr(ORIGIN);
+    const original = createClassicErr(ORIGIN);
     result = original.map(op);
 
     t.true(result.isErr(), 'the returned value should be `Err<U, E>');
diff --git a/__tests__/ClassResult/map_err.test.mjs b/__tests__/ClassicResult/map_err.test.mjs
similarity index 86%
rename from __tests__/ClassResult/map_err.test.mjs
rename to __tests__/ClassicResult/map_err.test.mjs
index bc9e9b86..9437b15b 100644
--- a/__tests__/ClassResult/map_err.test.mjs
+++ b/__tests__/ClassicResult/map_err.test.mjs
@@ -1,6 +1,6 @@
 import test from 'ava';
 
-import { createOk, createErr } from '../../__dist/esm/Result.js';
+import { createClassicOk, createClassicErr } from '../../__dist/esm/ClassicResult/ClassicResult.js';
 
 test('Ok<T>', function (t) {
     t.plan(4);
@@ -18,7 +18,7 @@ test('Ok<T>', function (t) {
 
     t.not(opIsCalled, true);
 
-    const original = createOk(ORIGIN);
+    const original = createClassicOk(ORIGIN);
     result = original.mapErr(op);
 
     t.is(result.isOk(), true, 'the returned value should be `Ok<T, F>');
@@ -42,7 +42,7 @@ test('Err<E>', function (t) {
 
     t.not(argument, ORIGIN);
 
-    const original = createErr(ORIGIN);
+    const original = createClassicErr(ORIGIN);
     result = original.mapErr(op);
 
     t.is(result.isErr(), true, 'the returned value should be `Err<T, F>');
diff --git a/__tests__/ClassResult/map_or_else.test.mjs b/__tests__/ClassicResult/map_or_else.test.mjs
similarity index 79%
rename from __tests__/ClassResult/map_or_else.test.mjs
rename to __tests__/ClassicResult/map_or_else.test.mjs
index 66487450..7dd2e565 100644
--- a/__tests__/ClassResult/map_or_else.test.mjs
+++ b/__tests__/ClassicResult/map_or_else.test.mjs
@@ -1,6 +1,6 @@
 import test from 'ava';
 
-import { createOk, createErr } from '../../__dist/esm/Result.js';
+import { createClassicOk, createClassicErr } from '../../__dist/esm/ClassicResult/ClassicResult.js';
 
 const PLAN_COUNT = 2;
 
@@ -10,7 +10,7 @@ test('Ok<T>', (t) => {
 
     t.plan(PLAN_COUNT);
 
-    const input = createOk(INITIAL);
+    const input = createClassicOk(INITIAL);
     const r = input.mapOrElse(
         (_e) => {
             t.fail(`don't enter this path`);
@@ -30,7 +30,7 @@ test('Err<E>', (t) => {
 
     t.plan(PLAN_COUNT);
 
-    const input = createErr(INITIAL);
+    const input = createClassicErr(INITIAL);
     const r = input.mapOrElse(
         (e) => {
             t.is(e, INITIAL, 'the argument');
diff --git a/__tests__/ClassResult/ok.test.mjs b/__tests__/ClassicResult/ok.test.mjs
similarity index 63%
rename from __tests__/ClassResult/ok.test.mjs
rename to __tests__/ClassicResult/ok.test.mjs
index cfc2fc28..5f356ded 100644
--- a/__tests__/ClassResult/ok.test.mjs
+++ b/__tests__/ClassicResult/ok.test.mjs
@@ -1,17 +1,17 @@
 import test from 'ava';
 
-import { createOk, createErr } from '../../__dist/esm/Result.js';
+import { createClassicOk, createClassicErr } from '../../__dist/esm/ClassicResult/ClassicResult.js';
 const EXPECTED_OK = Symbol('expected_ok');
 const EXPECTED_ERR = Symbol('expected_err');
 
 test('Ok<T>', (t) => {
-    const ok = createOk(EXPECTED_OK);
+    const ok = createClassicOk(EXPECTED_OK);
 
     t.true(ok.ok().isSome, 'return `Some<T>`');
     t.is(ok.ok().unwrap(), EXPECTED_OK, 'the inner value is expected');
 });
 
 test('Err<E>', (t) => {
-    const err = createErr(EXPECTED_ERR);
+    const err = createClassicErr(EXPECTED_ERR);
     t.true(err.ok().isNone, 'return `None<T>`');
 });
diff --git a/__tests__/ClassResult/or.test.mjs b/__tests__/ClassicResult/or.test.mjs
similarity index 69%
rename from __tests__/ClassResult/or.test.mjs
rename to __tests__/ClassicResult/or.test.mjs
index cd62560a..7d09e60f 100644
--- a/__tests__/ClassResult/or.test.mjs
+++ b/__tests__/ClassicResult/or.test.mjs
@@ -1,6 +1,6 @@
 import test from 'ava';
 
-import { createOk, createErr } from '../../__dist/esm/Result.js';
+import { createClassicOk, createClassicErr } from '../../__dist/esm/ClassicResult/ClassicResult.js';
 
 const EXPECTED = Symbol('0');
 const UNEXPECTED = Symbol('1');
@@ -14,9 +14,9 @@ function toLabel(input) {
 }
 
 const testcaseList = [
-    [createOk(EXPECTED), createOk(UNEXPECTED)],
-    [createOk(EXPECTED), createErr(UNEXPECTED)],
-    [createErr(UNEXPECTED), createOk(EXPECTED)],
+    [createClassicOk(EXPECTED), createClassicOk(UNEXPECTED)],
+    [createClassicOk(EXPECTED), createClassicErr(UNEXPECTED)],
+    [createClassicErr(UNEXPECTED), createClassicOk(EXPECTED)],
 ];
 for (const [lhs, rhs] of testcaseList) {
     test(`lhs: ${toLabel(lhs)}, rhs: ${toLabel(rhs)}`, (t) => {
@@ -26,7 +26,7 @@ for (const [lhs, rhs] of testcaseList) {
     });
 }
 
-const failureTestcaseList = [[createErr(UNEXPECTED), createErr(EXPECTED)]];
+const failureTestcaseList = [[createClassicErr(UNEXPECTED), createClassicErr(EXPECTED)]];
 for (const [lhs, rhs] of failureTestcaseList) {
     test(`lhs: ${toLabel(lhs)}, rhs: ${toLabel(rhs)}`, (t) => {
         const result = lhs.or(rhs);
diff --git a/__tests__/ClassResult/or_else.test.mjs b/__tests__/ClassicResult/or_else.test.mjs
similarity index 75%
rename from __tests__/ClassResult/or_else.test.mjs
rename to __tests__/ClassicResult/or_else.test.mjs
index 3f4de2c8..eca5bc6f 100644
--- a/__tests__/ClassResult/or_else.test.mjs
+++ b/__tests__/ClassicResult/or_else.test.mjs
@@ -1,11 +1,15 @@
 import test from 'ava';
 
-import { createOk, createErr, ResultBase } from '../../__dist/esm/Result.js';
+import {
+    createClassicOk,
+    createClassicErr,
+    ClassicResultBase,
+} from '../../__dist/esm/ClassicResult/ClassicResult.js';
 
 const ORIGIN = Symbol('ORIGIN');
 const EXPECTED = Symbol('EXPECTED');
 
-const okTestcase = [createOk, createErr];
+const okTestcase = [createClassicOk, createClassicErr];
 for (const innerFn of okTestcase) {
     test(`Ok(T), return ${innerFn.name}`, (t) => {
         const op = function (_v) {
@@ -13,7 +17,7 @@ for (const innerFn of okTestcase) {
             return innerFn(EXPECTED);
         };
 
-        const origin = createOk(ORIGIN);
+        const origin = createClassicOk(ORIGIN);
         const result = origin.orElse(op);
 
         t.is(result.isOk(), true, 'the returned value should be `Ok');
@@ -26,10 +30,10 @@ test(`Err(E), return Ok`, (t) => {
 
     const op = function (v) {
         t.is(v, ORIGIN, 'the argument of `op` should be the expected value');
-        return createOk(EXPECTED);
+        return createClassicOk(EXPECTED);
     };
 
-    const origin = createErr(ORIGIN);
+    const origin = createClassicErr(ORIGIN);
     const result = origin.orElse(op);
 
     t.is(result.isOk(), true, 'the returned value should be `Ok');
@@ -41,10 +45,10 @@ test(`Err(E), return Err`, (t) => {
 
     const op = function (v) {
         t.is(v, ORIGIN, 'the argument of `op` should be the expected value');
-        return createErr(EXPECTED);
+        return createClassicErr(EXPECTED);
     };
 
-    const origin = createErr(ORIGIN);
+    const origin = createClassicErr(ORIGIN);
     const result = origin.orElse(op);
 
     t.is(result.isErr(), true, 'the returned value should be `Err');
@@ -52,7 +56,7 @@ test(`Err(E), return Err`, (t) => {
 });
 
 test('Ok(T): return non Result type', (t) => {
-    const input = createOk(1);
+    const input = createClassicOk(1);
     t.notThrows(() => {
         input.orElse(function (v) {
             t.fail("don't call");
@@ -64,11 +68,11 @@ test('Ok(T): return non Result type', (t) => {
 test('Err(E): return non Result type', (t) => {
     t.plan(2);
 
-    const input = createErr(1);
+    const input = createClassicErr(1);
     t.throws(
         () => {
             input.orElse(function (v) {
-                t.false(v instanceof ResultBase);
+                t.false(v instanceof ClassicResultBase);
                 return v;
             });
         },
diff --git a/__tests__/ClassResult/unwrap.test.mjs b/__tests__/ClassicResult/unwrap.test.mjs
similarity index 65%
rename from __tests__/ClassResult/unwrap.test.mjs
rename to __tests__/ClassicResult/unwrap.test.mjs
index 44b63908..5521b9c9 100644
--- a/__tests__/ClassResult/unwrap.test.mjs
+++ b/__tests__/ClassicResult/unwrap.test.mjs
@@ -1,19 +1,19 @@
 import test from 'ava';
 
-import { createOk, createErr } from '../../__dist/esm/Result.js';
+import { createClassicOk, createClassicErr } from '../../__dist/esm/ClassicResult/ClassicResult.js';
 
 const EXPECTED_OK = 'expected_ok';
 const EXPECTED_ERR = 'expected_err';
 
 test('Ok<T>', (t) => {
-    const ok = createOk(EXPECTED_OK);
+    const ok = createClassicOk(EXPECTED_OK);
     t.is(ok.unwrap(), EXPECTED_OK);
 });
 
 test('Err<E>', (t) => {
     t.throws(
         () => {
-            const err = createErr(EXPECTED_ERR);
+            const err = createClassicErr(EXPECTED_ERR);
             err.unwrap();
         },
         {
diff --git a/__tests__/ClassResult/unwrap_err.test.mjs b/__tests__/ClassicResult/unwrap_err.test.mjs
similarity index 68%
rename from __tests__/ClassResult/unwrap_err.test.mjs
rename to __tests__/ClassicResult/unwrap_err.test.mjs
index e8f796b1..ac5dce9c 100644
--- a/__tests__/ClassResult/unwrap_err.test.mjs
+++ b/__tests__/ClassicResult/unwrap_err.test.mjs
@@ -1,12 +1,12 @@
 import test from 'ava';
 
-import { createOk, createErr } from '../../__dist/esm/Result.js';
+import { createClassicOk, createClassicErr } from '../../__dist/esm/ClassicResult/ClassicResult.js';
 
 const EXPECTED_OK = 'expected_ok';
 const EXPECTED_ERR = 'expected_err';
 
 test('Ok<T>', function (t) {
-    const result = createOk(EXPECTED_OK);
+    const result = createClassicOk(EXPECTED_OK);
     t.throws(
         () => {
             result.unwrapErr();
@@ -19,6 +19,6 @@ test('Ok<T>', function (t) {
 });
 
 test('Err<E>', function (t) {
-    const ok = createErr(EXPECTED_ERR);
+    const ok = createClassicErr(EXPECTED_ERR);
     t.is(ok.unwrapErr(), EXPECTED_ERR, 'should be expected value');
 });
diff --git a/__tests__/ClassResult/unwrap_or.test.mjs b/__tests__/ClassicResult/unwrap_or.test.mjs
similarity index 64%
rename from __tests__/ClassResult/unwrap_or.test.mjs
rename to __tests__/ClassicResult/unwrap_or.test.mjs
index 2cd06907..37541b9d 100644
--- a/__tests__/ClassResult/unwrap_or.test.mjs
+++ b/__tests__/ClassicResult/unwrap_or.test.mjs
@@ -1,12 +1,12 @@
 import test from 'ava';
 
-import { createOk, createErr } from '../../__dist/esm/Result.js';
+import { createClassicOk, createClassicErr } from '../../__dist/esm/ClassicResult/ClassicResult.js';
 
 test('Ok<T>', (t) => {
     const EXPECTED = Symbol('EXPECTED');
     const NOT_EXPECTED = Symbol('NOT_EXPECTED');
 
-    const result = createOk(EXPECTED);
+    const result = createClassicOk(EXPECTED);
     t.is(result.unwrapOr(NOT_EXPECTED), EXPECTED);
 });
 
@@ -14,6 +14,6 @@ test('Err<E>', (t) => {
     const EXPECTED = Symbol('EXPECTED');
     const NOT_EXPECTED = Symbol('NOT_EXPECTED');
 
-    const result = createErr(NOT_EXPECTED);
+    const result = createClassicErr(NOT_EXPECTED);
     t.is(result.unwrapOr(EXPECTED), EXPECTED);
 });
diff --git a/__tests__/ClassResult/unwrap_or_else.test.mjs b/__tests__/ClassicResult/unwrap_or_else.test.mjs
similarity index 83%
rename from __tests__/ClassResult/unwrap_or_else.test.mjs
rename to __tests__/ClassicResult/unwrap_or_else.test.mjs
index 5fa2fada..f5cbe996 100644
--- a/__tests__/ClassResult/unwrap_or_else.test.mjs
+++ b/__tests__/ClassicResult/unwrap_or_else.test.mjs
@@ -1,6 +1,6 @@
 import test from 'ava';
 
-import { createOk, createErr } from '../../__dist/esm/Result.js';
+import { createClassicOk, createClassicErr } from '../../__dist/esm/ClassicResult/ClassicResult.js';
 
 test('Ok<T>', function (t) {
     t.plan(2);
@@ -16,7 +16,7 @@ test('Ok<T>', function (t) {
 
     t.not(acutual, EXPECTED);
 
-    const result = createOk(EXPECTED);
+    const result = createClassicOk(EXPECTED);
     acutual = result.unwrapOrElse(op);
 
     t.is(acutual, EXPECTED, 'the returned is expected');
@@ -39,7 +39,7 @@ test('Err<E>', function (t) {
     t.not(argument, ORIGINAL);
     t.not(acutual, EXPECTED);
 
-    const result = createErr(ORIGINAL);
+    const result = createClassicErr(ORIGINAL);
     acutual = result.unwrapOrElse(op);
 
     t.is(argument, ORIGINAL, 'the argument of `op` is expeced');
diff --git a/__tests__/PlainResult/from_promise_settled_result.test.mjs b/__tests__/PlainResult/from_promise_settled_result.test.mjs
deleted file mode 100644
index f1d14979..00000000
--- a/__tests__/PlainResult/from_promise_settled_result.test.mjs
+++ /dev/null
@@ -1,42 +0,0 @@
-import test from 'ava';
-
-import { isOk, isErr } from '../../__dist/esm/PlainResult/Result.js';
-import { fromPromiseSettledResultToResult } from '../../__dist/esm/PlainResult/fromPromiseSettledResult.js';
-import { unwrapOkFromResult, unwrapErrFromResult } from '../../__dist/esm/PlainResult/unwrap.js';
-
-test('should be Ok(T)', async (t) => {
-    const VALUE_T = Symbol('value');
-    const [input] = await Promise.allSettled([Promise.resolve(VALUE_T)]);
-    t.is(input.status, 'fulfilled');
-
-    const actual = fromPromiseSettledResultToResult(input);
-    t.true(isOk(actual), 'should be Ok');
-    t.is(unwrapOkFromResult(actual), VALUE_T, 'should be the wrapped value');
-});
-
-test('should be Err(T)', async (t) => {
-    const VALUE_E = Symbol('error');
-    const [input] = await Promise.allSettled([Promise.reject(VALUE_E)]);
-    t.is(input.status, 'rejected');
-
-    const actual = fromPromiseSettledResultToResult(input);
-    t.true(isErr(actual), 'should be Ok');
-    t.is(unwrapErrFromResult(actual), VALUE_E, 'should be the wrapped value');
-});
-
-test('should throw error if the input is not supported type', async (t) => {
-    const status = `unknown_${Math.random()}`;
-    const unknownPromiseSettledResult = {
-        status,
-    };
-
-    t.throws(
-        () => {
-            fromPromiseSettledResultToResult(unknownPromiseSettledResult);
-        },
-        {
-            instanceOf: TypeError,
-            message: `\`PromiseSettledResult.status=${status}\` is not supported`,
-        }
-    );
-});