Самый простой способ, вероятно, состоит в том, чтобы постулировать существование такого примитива, а затем объяснить Агде, как скомпилировать его с помощью COMPILE
прагмы.
open import Agda.Builtin.Float
import IO.Primitive as Prim
open import IO
random : IO Float
random = lift primRandom where
postulate primRandom : Prim.IO Float
{-# FOREIGN GHC import qualified System.Random as Random #-}
{-# COMPILE GHC primRandom = Random.randomIO #-}
open import Codata.Musical.Notation
open import Function
main : Prim.IO _
main = run $
♯ random >>= λ f → ♯ putStrLn (primShowFloat f)
Я включил main
, чтобы вы могли скомпилировать этот файл (используя agda -c FILENAME
) и запустить его, чтобы убедиться, что вы действительно получаете случайные числа с плавающей запятой.