Type Checking
=============
-.. code:: python
+.. code:: ipython2
import logging, sys
level=logging.INFO,
)
-.. code:: python
+.. code:: ipython2
from joy.utils.types import (
doc_from_stack_effect,
JoyTypeError,
)
-.. code:: python
+.. code:: ipython2
D = FUNCTIONS.copy()
del D['product']
An Example
----------
-.. code:: python
+.. code:: ipython2
fi, fo = infer(pop, swap, rolldown, rrest, ccons)[0]
40 ([a4 a5 ...1] a3 a2 a1 -- [a2 a3 ...1]) ∘
-.. code:: python
+.. code:: ipython2
print doc_from_stack_effect(fi, fo)
([a4 a5 ...1] a3 a2 a1 -- [a2 a3 ...1])
-.. code:: python
+.. code:: ipython2
from joy.parser import text_to_expression
from joy.utils.stack import stack_to_string
-.. code:: python
+.. code:: ipython2
e = text_to_expression('0 1 2 [3 4]') # reverse order
print stack_to_string(e)
[3 4] 2 1 0
-.. code:: python
+.. code:: ipython2
u = unify(e, fi)[0]
u
-.. code:: python
+.. code:: ipython2
g = reify(u, (fi, fo))
print doc_from_stack_effect(*g)
Unification Works “in Reverse”
------------------------------
-.. code:: python
+.. code:: ipython2
e = text_to_expression('[2 3]')
-.. code:: python
+.. code:: ipython2
u = unify(e, fo)[0] # output side, not input side
u
-.. code:: python
+.. code:: ipython2
g = reify(u, (fi, fo))
print doc_from_stack_effect(*g)
Failing a Check
---------------
-.. code:: python
+.. code:: ipython2
fi, fo = infer(dup, mul)[0]
31 (i1 -- i2) ∘
-.. code:: python
+.. code:: ipython2
e = text_to_expression('"two"')
print stack_to_string(e)
'two'
-.. code:: python
+.. code:: ipython2
try:
unify(e, fi)