## ----setup, include=FALSE-----------------------------------------------------
library(rstan)
knitr::opts_chunk$set(
  echo = TRUE, eval = FALSE, error = TRUE
)

## ----eval = TRUE--------------------------------------------------------------
mc <- 
'
functions { int fib(int n); }
model {} // use the fib() function somehow
'
try(stan_model(model_code = mc, model_name = "parser_error"), silent = TRUE)

## -----------------------------------------------------------------------------
#  stan_model(model_code = mc, model_name = "external", allow_undefined = TRUE,
#             includes = paste0('\n#include "',
#                               file.path(getwd(), 'fib.hpp'), '"\n'))

## ----echo = FALSE, eval = TRUE, comment = NA----------------------------------
cat(readLines(system.file("include", "src", "stan", "model", "model_header.hpp", 
                          package = "StanHeaders")), sep = "\n")

## ----eval = TRUE--------------------------------------------------------------
mc <- 
'
functions { real sinc(real x); }
transformed data { real sinc_pi = sinc(pi()); }
'
stan_model(model_code = mc, model_name = "external", allow_undefined = TRUE,
           includes = paste0('\n#include "', 
                             file.path(getwd(), 'sinc.hpp'), '"\n'))

## ----echo = FALSE, eval = TRUE, comment=""------------------------------------
cat(readLines("sinc.hpp"), sep = "\n")

## ----eval = TRUE--------------------------------------------------------------
try(readLines(stanc(model_code = mc, allow_undefined = TRUE)$cppcode))

