Я не специалист по потоку ни один из них, ни эксперт по модулю python unmitest, поэтому очень жаль, если мой ответ не поможет вам решить вашу проблему.
Сказав, в вашем модуле example.py, метод test_Header полагается на экземпляр dict Browsers_waiting, определенный в унаследованном классе Setup из модуля инициализации. Вопрос, о котором идет речь, заполняется ключевыми парами значений, когда выполняется метод get_browser_and_wait.
Итак, в этот момент, если метод get_browser_and_wait никогда не вызывался, вы перебираете пустой dict
def test_Header(self):
for i, browser in enumerate(Setup().browsers_waiting):
# this does not work
driver = browser["driver"]
self.test_result = None
Снова сказав это, я не знаю, как работает модуль unitest, и этот dict должен иметь некоторые значения при ссылке.
Val :: Int -> Expr a
для любой a
. Таким образом,
Val x <*> _ = Val x
является действительным, как и
_ <*> Val y = Val y
, как и
Val x <*> Val y = Val (something about x and y)
, поэтому, к сожалению, теперь у вас есть выбор, что означает, что вы собираетесь сделать неправильный К счастью, только один из них совместим с экземпляром Monad
(какой?).
Что касается рекурсивного случая, у вас есть
Add e e' <*> fb = ...
-- e :: Expr (a -> b)
-- e' :: Expr (a -> b)
-- fb :: Expr a
И вы должны использовать всю входящую информацию для создания Expr b
, а также для сохранения «структуры» (Add
). Каким образом вы можете сделать Expr b
из этого (помните, что вы можете использовать аппликативный оператор рекурсивно)?