\documentclass{article}
\usepackage{etoolbox}
\usepackage{hyperref}
\usepackage{xcolor}
\usepackage{listings}
\lstdefinelanguage{sail}
  { morekeywords={val,function,mapping,cast,type,forall,overload,operator,enum,union,undefined,exit,and,assert,sizeof,
      scattered,register,inc,dec,if,then,else,effect,let,as,@,in,end,Type,Int,Order,match,clause,struct,
      foreach,from,to,by,infix,infixl,infixr,bitfield,default,try,catch,throw,constraint},
    keywordstyle={\bf\ttfamily\color{blue}},
    morestring=[b]",
    stringstyle={\ttfamily\color{red}},
    morecomment=[l][\itshape\color{DarkGreen}]{//},
    morecomment=[s][\itshape\color{DarkGreen}]{/*}{*/},
    deletestring=[bd]{'},
    escapechar=\#,
    emphstyle={\it},
    literate=
      {\{|}{{$\{|$}}1
      {|\}}{{$|\}$}}1
  }

\input{out/commands.tex}
\begin{document}

\clearpage
type: \sailtype{cap\_uperms\_width}

\clearpage
ref type: \sailreftype{cap\_uperms\_width}{ref to cap\_uperms\_width}

\clearpage
val: \sailval{main}

\clearpage
refval: \sailrefval{main}{ref to main}

\clearpage
\sailfn{main}

\clearpage
reffn: \sailreffn{main}{ref to main}

\end{document}
