dbrattli / Expression

Pragmatic functional programming for Python inspired by F#
https://expression.readthedocs.io
MIT License
421 stars 30 forks source link

Using TypeAlias #115

Closed phi-friday closed 1 year ago

phi-friday commented 1 year ago

110

origin

import typing as tp

import expression as ex

def get_result() -> ex.Result[int, tp.Any]:
    return ex.Ok(1)

a = get_result()
if isinstance(a, ex.Ok):
    b = a  # in pylance:: (variable) b: Ok[int, Any]
    v = a.value  # in pylance:: (variable) v: int
else:
    b = a  # in pylance:: (variable) b: Result[int, Any]
    # in pylance:: Cannot access member "error" for type "Result[int, Any]"
    #   Member "error" is unknown
    v = a.error

c = get_result()
if isinstance(c, ex.Error):
    d = c  # in pylance:: (variable) d: Error[int, Any]
    v = c.error  # in pylance:: (variable) v: Any
else:
    d = c  # in pylance:: (variable) d: Result[int, Any]
    # in pylance:: Cannot access member "value" for type "Result[int, Any]"
    #   Member "value" is unknown
    v = c.value

new

import typing as tp

import expression as ex

def get_result() -> ex.Result[int, tp.Any]:
    return ex.Ok(1)

a = get_result()
if isinstance(a, ex.Ok):
    b = a  # in pylance:: (variable) b: Ok[int, Any]
    v = a.value  # in pylance:: (variable) v: int
else:
    b = a  # in pylance:: (variable) b: Error[int, Any]
    v = a.error # in pylance:: (variable) v: Any

c = get_result()
if isinstance(c, ex.Error):
    d = c  # in pylance:: (variable) d: Error[int, Any]
    v = c.error  # in pylance:: (variable) v: Any
else:
    d = c  # in pylance:: (variable) d: Ok[int, Any]
    v = c.value # in pylance:: (variable) v: int
phi-friday commented 1 year ago

TypeAlias could not be used in isinstacne, so it was replaced by BaseResult or BaseOption.