  Probabilistic programming languages and modeling toolkits are two modular
ways to build and reuse stochastic models and inference procedures. Combining
strengths of both, we express models and inference as generalized coroutines in
the same general-purpose language. We use existing facilities of the language,
such as rich libraries, optimizing compilers, and types, to develop concise,
declarative, and realistic models with competitive performance on exact and
approximate inference. In particular, a wide range of models can be expressed
using memoization. Because deterministic parts of models run at full speed,
custom inference procedures are trivial to incorporate, and inference
procedures can reason about themselves without interpretive overhead. Within
this framework, we introduce a new, general algorithm for importance sampling
with look-ahead.
