Bug#1054704: haskell-what4: FTBFS: make: *** [/usr/share/cdbs/1/class/hlibrary.mk:163: check-ghc-stamp] Error 25

Lucas Nussbaum lucas at debian.org
Fri Oct 27 20:13:19 BST 2023


Source: haskell-what4
Version: 1.5.1-2
Severity: serious
Justification: FTBFS
Tags: trixie sid ftbfs
User: lucas at debian.org
Usertags: ftbfs-20231027 ftbfs-trixie

Hi,

During a rebuild of all packages in sid, your package failed to build
on amd64.


Relevant part (hopefully):
>  fakeroot debian/rules binary
> test -x debian/rules
> dh_testroot
> dh_prep 
> dh_installdirs -A 
> mkdir -p "."
> CDBS WARNING:    DEB_DH_STRIP_ARGS is deprecated since 0.4.85
> CDBS WARNING:    DEB_COMPRESS_EXCLUDE is deprecated since 0.4.85
> Adding cdbs dependencies to debian/libghc-what4-doc.substvars
> dh_installdirs -plibghc-what4-doc \
> 	
> perl -d:Confess -MDebian::Debhelper::Buildsystem::Haskell::Recipes=/.*/ \
> 	-E 'check_recipe'
> Running dh_listpackages
> libghc-what4-dev
> libghc-what4-prof
> libghc-what4-doc
> haskell-what4-utils
> Running 10 test suites...
> Test suite config-test: RUNNING...
> ConfigTests
>   Set and get
>     create multiple options:                                 OK
>     create conflicting options:                              OK
>     create conflicting options at different levels:          OK
>     create duplicate unicode options:                        OK
>     get unset value, no default:                             OK
>       get unset string opt
>       get unset integer opt
>       get unset bool opt
>     get unset value, with default:                           OK
>       get unset default string opt
>       get unset default integer opt
>       get unset default bool opt
>     get set value, with default:                             OK
>       set string opt
>       set bool opt
>       set integer opt
>       get string opt
>       get integer opt
>       get bool opt
>     set invalid values:                                      OK
>       initial defaults
>       set string opt invalidly
>       set integer opt invalidly
>       set real opt invalidly
>     get and set option values by name:                       OK
>       getting with a Some OptionSetter requires type verification
>       setting using special setting functions
>       verify set values
>       cannot set values with wrong types
>     get multiple values at once:                             OK
>       set string opt
>       set bool opt
>       set alt int opt
>       get main config values
>       get all config values
>       get specific config value
>       get unknown config value
>   Deprecated Configs
>     deprecation removal (case #1):                           OK
>     deprecation rename (case #2):                            OK
>     deprecation rename (case #2), wrong order:               OK
>     deprecation rename and re-typed (case #3):               OK
>     deprecation, multiple replacements (case #4):            OK
>     deprecation, multiple + removed/split (case #4,(#1,#3)): OK
>   Config help
>     builtin-only config help:                                OK
>     three item (1 deprecated) config help:                   OK
>       all help
>       sub help
>       specific help
>       specific sub help
> 
> All 18 tests passed (0.00s)
> Test suite config-test: PASS
> Test suite logged to: dist-ghc/test/what4-1.5.1-config-test.log
> Test suite what4-serialize-tests: RUNNING...
> 
> 
> Writing logs to /tmp/brittle/log3008316-0.txt
> 
> What4
>   SymFns
>     same argument type:       OK
>         ✓ same argument type passed 1 test.
>     different argument types: OK
>         ✓ different argument types passed 1 test.
>     no arguments:             OK
>         ✓ no arguments passed 1 test.
>     two inner arguments:      OK
>         ✓ two inner arguments passed 1 test.
>     argument passthrough:     OK
>         ✓ argument passthrough passed 1 test.
>     negative ints:            OK
>         ✓ negative ints passed 1 test.
>     float lit:                OK
>         ✓ float lit passed 1 test.
>     simple struct:            OK
>         ✓ simple struct passed 1 test.
>     struct field access:      OK
>         ✓ struct field access passed 1 test.
>     array update:             OK
>         ✓ array update passed 1 test.
>     integer to bitvector:     OK
>         ✓ integer to bitvector passed 1 test.
>     float negate:             OK
>         ✓ float negate passed 1 test.
>     float abs:                OK
>         ✓ float abs passed 1 test.
>     same argument type:       OK
>         ✓ same argument type passed 1 test.
>     different argument types: OK
>         ✓ different argument types passed 1 test.
>     no arguments:             OK (0.01s)
>         ✓ no arguments passed 1 test.
>     two inner arguments:      OK
>         ✓ two inner arguments passed 1 test.
>     argument passthrough:     OK
>         ✓ argument passthrough passed 1 test.
>     negative ints:            OK
>         ✓ negative ints passed 1 test.
>     float lit:                OK
>         ✓ float lit passed 1 test.
>     simple struct:            OK
>         ✓ simple struct passed 1 test.
>     struct field access:      OK
>         ✓ struct field access passed 1 test.
>     array update:             OK
>         ✓ array update passed 1 test.
>     integer to bitvector:     OK
>         ✓ integer to bitvector passed 1 test.
>     float negate:             OK
>         ✓ float negate passed 1 test.
>     float abs:                OK
>         ✓ float abs passed 1 test.
> 
> All 26 tests passed (0.15s)
> Test suite what4-serialize-tests: PASS
> Test suite logged to: dist-ghc/test/what4-1.5.1-what4-serialize-tests.log
> Test suite template_tests: RUNNING...
> ━━━ Float tests ━━━
>   ✗ FloatFromBits <var> failed at test/TestTemplate.hs:646:64
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>         ┃      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>         ┃      │ ━━━ Exception (RunawaySolverTimeout) ━━━
>         ┃      │ RunawaySolverTimeout
>     647 ┃        do annotateShow (printSymExpr expr)
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>     657 ┃                    Right b -> if b then success else failure
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FloatFromBits <var>
>   
>   ✗ FloatToBits <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatToBinary c at 2:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 2:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0x0:[32]
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FloatToBits <var>
>   
>   ✗ FloatCast FloatingPointPrecisionRepr 8 24 RNE <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatCast RNE c at 4:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 4:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FloatCast FloatingPointPrecisionRepr 8 24 RNE <var>
>   
>   ✗ FloatCast FloatingPointPrecisionRepr 11 53 RNE <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatCast RNE c at 6:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 6:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FloatCast FloatingPointPrecisionRepr 11 53 RNE <var>
>   
>   ✗ FloatToReal <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatToReal  c at 8:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 8:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 % 1
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FloatToReal <var>
>   
>   ✗ RealToFloat FloatingPointPrecisionRepr 8 24 RNE <var> failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ realToFloat RNE c at 10:r
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 10:r |-> 0 % 1
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" RealToFloat FloatingPointPrecisionRepr 8 24 RNE <var>
>   
>   ✗ BVToFloat FloatingPointPrecisionRepr 8 24 RNE <var> failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ bvToFloat RNE c at 12:bv
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 12:bv |-> 0x0:[32]
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" BVToFloat FloatingPointPrecisionRepr 8 24 RNE <var>
>   
>   ✗ SBVToFloat FloatingPointPrecisionRepr 8 24 RNE <var> failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ sbvToFloat RNE c at 14:bv
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 14:bv |-> 0x0:[32]
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" SBVToFloat FloatingPointPrecisionRepr 8 24 RNE <var>
>   
>   ✗ FloatToBV 32 RNE <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatToBV RNE c at 16:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 16:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0x0:[32]
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FloatToBV 32 RNE <var>
>   
>   ✗ FloatToSBV32 RNE <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatToSBV RNE c at 18:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 18:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0x0:[32]
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FloatToSBV32 RNE <var>
>   
>   ✗ FIsNaN <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatIsNaN c at 20:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 20:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ False
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FIsNaN <var>
>   
>   ✗ FIsNaN +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ false
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ False
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FIsNaN +0.0
>   
>   ✗ FIsNaN -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ false
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ False
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FIsNaN -0.0
>   
>   ✗ FIsNaN NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ true
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ True
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FIsNaN NaN
>   
>   ✗ FIsInf <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatIsInf c at 22:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 22:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ False
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FIsInf <var>
>   
>   ✗ FIsInf +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ false
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ False
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FIsInf +0.0
>   
>   ✗ FIsInf -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ false
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ False
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FIsInf -0.0
>   
>   ✗ FIsInf NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ false
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ False
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FIsInf NaN
>   
>   ✗ FIsZero <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatIsZero c at 24:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 24:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ True
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FIsZero <var>
>   
>   ✗ FIsZero +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ true
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ True
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FIsZero +0.0
>   
>   ✗ FIsZero -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ true
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ True
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FIsZero -0.0
>   
>   ✗ FIsZero NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ false
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ False
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FIsZero NaN
>   
>   ✗ FIsPos <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatIsPos c at 26:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 26:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ True
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FIsPos <var>
>   
>   ✗ FIsPos +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ true
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ True
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FIsPos +0.0
>   
>   ✗ FIsPos -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ false
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ False
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FIsPos -0.0
>   
>   ✗ FIsPos NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ false
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ False
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FIsPos NaN
>   
>   ✗ FIsNeg <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatIsNeg c at 28:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 28:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ False
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FIsNeg <var>
>   
>   ✗ FIsNeg +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ false
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ False
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FIsNeg +0.0
>   
>   ✗ FIsNeg -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ true
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ True
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FIsNeg -0.0
>   
>   ✗ FIsNeg NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ false
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ False
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FIsNeg NaN
>   
>   ✗ FIsSubnorm <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatIsSubnorm c at 30:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 30:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ False
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FIsSubnorm <var>
>   
>   ✗ FIsSubnorm +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ false
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ False
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FIsSubnorm +0.0
>   
>   ✗ FIsSubnorm -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ false
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ False
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FIsSubnorm -0.0
>   
>   ✗ FIsSubnorm NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ false
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ False
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FIsSubnorm NaN
>   
>   ✗ FIsNorm <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatIsNorm c at 32:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 32:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ False
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FIsNorm <var>
>   
>   ✗ FIsNorm +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ false
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ False
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FIsNorm +0.0
>   
>   ✗ FIsNorm -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ false
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ False
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FIsNorm -0.0
>   
>   ✗ FIsNorm NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ false
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ False
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FIsNorm NaN
>   
>   ✗ FLogicEq <var> <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 2 shrinks.
>     shrink path: 1:a2
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ eq c at 34:f c at 35:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 34:f |-> 0 0x0
>         ┃           │ c at 35:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ True
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a2" FLogicEq <var> <var>
>   
>   ✗ FLogicEq <var> +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ eq c at 37:f 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 37:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ True
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FLogicEq <var> +0.0
>   
>   ✗ FLogicEq <var> -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ eq c at 39:f -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 39:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ False
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FLogicEq <var> -0.0
>   
>   ✗ FLogicEq <var> NaN failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ eq c at 41:f NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 41:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ False
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FLogicEq <var> NaN
>   
>   ✗ FLogicEq +0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ eq 0 c at 43:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 43:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ True
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FLogicEq +0.0 <var>
>   
>   ✗ FLogicEq +0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ true
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ True
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FLogicEq +0.0 +0.0
>   
>   ✗ FLogicEq +0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ false
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ False
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FLogicEq +0.0 -0.0
>   
>   ✗ FLogicEq +0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ false
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ False
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FLogicEq +0.0 NaN
>   
>   ✗ FLogicEq -0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ eq -0 c at 45:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 45:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ False
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FLogicEq -0.0 <var>
>   
>   ✗ FLogicEq -0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ false
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ False
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FLogicEq -0.0 +0.0
>   
>   ✗ FLogicEq -0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ true
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ True
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FLogicEq -0.0 -0.0
>   
>   ✗ FLogicEq -0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ false
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ False
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FLogicEq -0.0 NaN
>   
>   ✗ FLogicEq NaN <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ eq NaN c at 47:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 47:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ False
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FLogicEq NaN <var>
>   
>   ✗ FLogicEq NaN +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ false
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ False
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FLogicEq NaN +0.0
>   
>   ✗ FLogicEq NaN -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ false
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ False
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FLogicEq NaN -0.0
>   
>   ✗ FLogicEq NaN NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ true
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ True
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FLogicEq NaN NaN
>   
>   ✗ FLogicNeq <var> <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 2 shrinks.
>     shrink path: 1:a2
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ not (eq c at 49:f c at 50:f)
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 49:f |-> 0 0x0
>         ┃           │ c at 50:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ False
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a2" FLogicNeq <var> <var>
>   
>   ✗ FLogicNeq <var> +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ not (eq c at 53:f 0)
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 53:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ False
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FLogicNeq <var> +0.0
>   
>   ✗ FLogicNeq <var> -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ not (eq c at 56:f -0)
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 56:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ True
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FLogicNeq <var> -0.0
>   
>   ✗ FLogicNeq <var> NaN failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ not (eq c at 59:f NaN)
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 59:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ True
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FLogicNeq <var> NaN
>   
>   ✗ FLogicNeq +0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ not (eq 0 c at 62:f)
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 62:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ False
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FLogicNeq +0.0 <var>
>   
>   ✗ FLogicNeq +0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ false
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ False
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FLogicNeq +0.0 +0.0
>   
>   ✗ FLogicNeq +0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ true
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ True
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FLogicNeq +0.0 -0.0
>   
>   ✗ FLogicNeq +0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ true
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ True
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FLogicNeq +0.0 NaN
>   
>   ✗ FLogicNeq -0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ not (eq -0 c at 65:f)
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 65:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ True
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FLogicNeq -0.0 <var>
>   
>   ✗ FLogicNeq -0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ true
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ True
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FLogicNeq -0.0 +0.0
>   
>   ✗ FLogicNeq -0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ false
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ False
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FLogicNeq -0.0 -0.0
>   
>   ✗ FLogicNeq -0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ true
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ True
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FLogicNeq -0.0 NaN
>   
>   ✗ FLogicNeq NaN <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ not (eq NaN c at 68:f)
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 68:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ True
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FLogicNeq NaN <var>
>   
>   ✗ FLogicNeq NaN +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ true
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ True
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FLogicNeq NaN +0.0
>   
>   ✗ FLogicNeq NaN -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ true
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ True
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FLogicNeq NaN -0.0
>   
>   ✗ FLogicNeq NaN NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ false
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ False
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FLogicNeq NaN NaN
>   
>   ✗ FEq <var> <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 2 shrinks.
>     shrink path: 1:a2
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFpEq c at 71:f c at 72:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 71:f |-> 0 0x0
>         ┃           │ c at 72:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ True
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a2" FEq <var> <var>
>   
>   ✗ FEq <var> +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFpEq c at 74:f 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 74:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ True
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FEq <var> +0.0
>   
>   ✗ FEq <var> -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFpEq c at 76:f -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 76:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ True
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FEq <var> -0.0
>   
>   ✗ FEq <var> NaN failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFpEq c at 78:f NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 78:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ False
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FEq <var> NaN
>   
>   ✗ FEq +0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFpEq 0 c at 80:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 80:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ True
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FEq +0.0 <var>
>   
>   ✗ FEq +0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ true
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ True
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FEq +0.0 +0.0
>   
>   ✗ FEq +0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ true
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ True
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FEq +0.0 -0.0
>   
>   ✗ FEq +0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ false
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ False
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FEq +0.0 NaN
>   
>   ✗ FEq -0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFpEq -0 c at 82:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 82:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ True
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FEq -0.0 <var>
>   
>   ✗ FEq -0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ true
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ True
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FEq -0.0 +0.0
>   
>   ✗ FEq -0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ true
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ True
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FEq -0.0 -0.0
>   
>   ✗ FEq -0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ false
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ False
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FEq -0.0 NaN
>   
>   ✗ FEq NaN <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFpEq NaN c at 84:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 84:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ False
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FEq NaN <var>
>   
>   ✗ FEq NaN +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ false
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ False
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FEq NaN +0.0
>   
>   ✗ FEq NaN -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ false
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ False
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FEq NaN -0.0
>   
>   ✗ FEq NaN NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ false
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ False
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FEq NaN NaN
>   
>   ✗ FApart <var> <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 2 shrinks.
>     shrink path: 1:a2
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ let -- :1:0
>         ┃        │     v90 = and (not (floatLt c at 86:f c at 87:f)) (not (floatLt c at 87:f c at 86:f))
>         ┃        │  in not v90
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 86:f |-> 0 0x0
>         ┃           │ c at 87:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ False
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a2" FApart <var> <var>
>   
>   ✗ FApart <var> +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ not (and (not (floatLt c at 92:f 0)) (not (floatLt 0 c at 92:f)))
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 92:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ False
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FApart <var> +0.0
>   
>   ✗ FApart <var> -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ not (and (not (floatLt c at 97:f -0)) (not (floatLt -0 c at 97:f)))
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 97:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ False
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FApart <var> -0.0
>   
>   ✗ FApart <var> NaN failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ not (and (not (floatLt c at 102:f NaN)) (not (floatLt NaN c at 102:f)))
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 102:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ False
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FApart <var> NaN
>   
>   ✗ FApart +0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ not (and (not (floatLt 0 c at 107:f)) (not (floatLt c at 107:f 0)))
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 107:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ False
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FApart +0.0 <var>
>   
>   ✗ FApart +0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ false
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ False
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FApart +0.0 +0.0
>   
>   ✗ FApart +0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ false
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ False
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FApart +0.0 -0.0
>   
>   ✗ FApart +0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ false
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ False
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FApart +0.0 NaN
>   
>   ✗ FApart -0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ not (and (not (floatLt -0 c at 112:f)) (not (floatLt c at 112:f -0)))
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 112:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ False
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FApart -0.0 <var>
>   
>   ✗ FApart -0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ false
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ False
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FApart -0.0 +0.0
>   
>   ✗ FApart -0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ false
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ False
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FApart -0.0 -0.0
>   
>   ✗ FApart -0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ false
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ False
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FApart -0.0 NaN
>   
>   ✗ FApart NaN <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ not (and (not (floatLt NaN c at 117:f)) (not (floatLt c at 117:f NaN)))
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 117:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ False
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FApart NaN <var>
>   
>   ✗ FApart NaN +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ false
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ False
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FApart NaN +0.0
>   
>   ✗ FApart NaN -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ false
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ False
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FApart NaN -0.0
>   
>   ✗ FApart NaN NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ false
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ False
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FApart NaN NaN
>   
>   ✗ FUnordered <var> <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 2 shrinks.
>     shrink path: 1:a2
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ not (and (not (floatIsNaN c at 122:f)) (not (floatIsNaN c at 123:f)))
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 122:f |-> 0 0x0
>         ┃           │ c at 123:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ False
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a2" FUnordered <var> <var>
>   
>   ✗ FUnordered <var> +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatIsNaN c at 128:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 128:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ False
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FUnordered <var> +0.0
>   
>   ✗ FUnordered <var> -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatIsNaN c at 130:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 130:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ False
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FUnordered <var> -0.0
>   
>   ✗ FUnordered <var> NaN failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ true
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 132:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ True
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FUnordered <var> NaN
>   
>   ✗ FUnordered +0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatIsNaN c at 134:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 134:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ False
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FUnordered +0.0 <var>
>   
>   ✗ FUnordered +0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ false
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ False
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FUnordered +0.0 +0.0
>   
>   ✗ FUnordered +0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ false
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ False
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FUnordered +0.0 -0.0
>   
>   ✗ FUnordered +0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ true
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ True
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FUnordered +0.0 NaN
>   
>   ✗ FUnordered -0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatIsNaN c at 136:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 136:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ False
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FUnordered -0.0 <var>
>   
>   ✗ FUnordered -0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ false
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ False
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FUnordered -0.0 +0.0
>   
>   ✗ FUnordered -0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ false
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ False
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FUnordered -0.0 -0.0
>   
>   ✗ FUnordered -0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ true
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ True
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FUnordered -0.0 NaN
>   
>   ✗ FUnordered NaN <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ true
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 138:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ True
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FUnordered NaN <var>
>   
>   ✗ FUnordered NaN +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ true
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ True
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FUnordered NaN +0.0
>   
>   ✗ FUnordered NaN -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ true
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ True
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FUnordered NaN -0.0
>   
>   ✗ FUnordered NaN NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ true
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ True
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FUnordered NaN NaN
>   
>   ✗ FLe <var> <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 2 shrinks.
>     shrink path: 1:a2
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatLe c at 140:f c at 141:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 140:f |-> 0 0x0
>         ┃           │ c at 141:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ True
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a2" FLe <var> <var>
>   
>   ✗ FLe <var> +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatLe c at 143:f 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 143:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ True
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FLe <var> +0.0
>   
>   ✗ FLe <var> -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatLe c at 145:f -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 145:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ True
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FLe <var> -0.0
>   
>   ✗ FLe <var> NaN failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatLe c at 147:f NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 147:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ False
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FLe <var> NaN
>   
>   ✗ FLe +0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatLe 0 c at 149:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 149:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ True
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FLe +0.0 <var>
>   
>   ✗ FLe +0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ true
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ True
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FLe +0.0 +0.0
>   
>   ✗ FLe +0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ true
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ True
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FLe +0.0 -0.0
>   
>   ✗ FLe +0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ false
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ False
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FLe +0.0 NaN
>   
>   ✗ FLe -0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatLe -0 c at 151:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 151:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ True
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FLe -0.0 <var>
>   
>   ✗ FLe -0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ true
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ True
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FLe -0.0 +0.0
>   
>   ✗ FLe -0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ true
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ True
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FLe -0.0 -0.0
>   
>   ✗ FLe -0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ false
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ False
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FLe -0.0 NaN
>   
>   ✗ FLe NaN <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatLe NaN c at 153:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 153:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ False
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FLe NaN <var>
>   
>   ✗ FLe NaN +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ false
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ False
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FLe NaN +0.0
>   
>   ✗ FLe NaN -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ false
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ False
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FLe NaN -0.0
>   
>   ✗ FLe NaN NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ false
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ False
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FLe NaN NaN
>   
>   ✗ FLt <var> <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 2 shrinks.
>     shrink path: 1:a2
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatLt c at 155:f c at 156:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 155:f |-> 0 0x0
>         ┃           │ c at 156:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ False
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a2" FLt <var> <var>
>   
>   ✗ FLt <var> +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatLt c at 158:f 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 158:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ False
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FLt <var> +0.0
>   
>   ✗ FLt <var> -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatLt c at 160:f -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 160:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ False
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FLt <var> -0.0
>   
>   ✗ FLt <var> NaN failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatLt c at 162:f NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 162:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ False
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FLt <var> NaN
>   
>   ✗ FLt +0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatLt 0 c at 164:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 164:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ False
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FLt +0.0 <var>
>   
>   ✗ FLt +0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ false
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ False
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FLt +0.0 +0.0
>   
>   ✗ FLt +0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ false
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ False
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FLt +0.0 -0.0
>   
>   ✗ FLt +0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ false
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ False
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FLt +0.0 NaN
>   
>   ✗ FLt -0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatLt -0 c at 166:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 166:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ False
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FLt -0.0 <var>
>   
>   ✗ FLt -0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ false
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ False
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FLt -0.0 +0.0
>   
>   ✗ FLt -0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ false
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ False
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FLt -0.0 -0.0
>   
>   ✗ FLt -0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ false
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ False
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FLt -0.0 NaN
>   
>   ✗ FLt NaN <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatLt NaN c at 168:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 168:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ False
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FLt NaN <var>
>   
>   ✗ FLt NaN +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ false
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ False
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FLt NaN +0.0
>   
>   ✗ FLt NaN -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ false
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ False
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FLt NaN -0.0
>   
>   ✗ FLt NaN NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ false
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ False
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FLt NaN NaN
>   
>   ✗ FGe <var> <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 2 shrinks.
>     shrink path: 1:a2
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatLe c at 171:f c at 170:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 170:f |-> 0 0x0
>         ┃           │ c at 171:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ True
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a2" FGe <var> <var>
>   
>   ✗ FGe <var> +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatLe 0 c at 173:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 173:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ True
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FGe <var> +0.0
>   
>   ✗ FGe <var> -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatLe -0 c at 175:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 175:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ True
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FGe <var> -0.0
>   
>   ✗ FGe <var> NaN failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatLe NaN c at 177:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 177:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ False
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FGe <var> NaN
>   
>   ✗ FGe +0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatLe c at 179:f 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 179:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ True
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FGe +0.0 <var>
>   
>   ✗ FGe +0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ true
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ True
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FGe +0.0 +0.0
>   
>   ✗ FGe +0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ true
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ True
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FGe +0.0 -0.0
>   
>   ✗ FGe +0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ false
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ False
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FGe +0.0 NaN
>   
>   ✗ FGe -0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatLe c at 181:f -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 181:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ True
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FGe -0.0 <var>
>   
>   ✗ FGe -0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ true
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ True
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FGe -0.0 +0.0
>   
>   ✗ FGe -0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ true
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ True
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FGe -0.0 -0.0
>   
>   ✗ FGe -0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ false
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ False
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FGe -0.0 NaN
>   
>   ✗ FGe NaN <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatLe c at 183:f NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 183:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ False
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FGe NaN <var>
>   
>   ✗ FGe NaN +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ false
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ False
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FGe NaN +0.0
>   
>   ✗ FGe NaN -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ false
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ False
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FGe NaN -0.0
>   
>   ✗ FGe NaN NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ false
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ False
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FGe NaN NaN
>   
>   ✗ FGt <var> <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 2 shrinks.
>     shrink path: 1:a2
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatLt c at 186:f c at 185:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 185:f |-> 0 0x0
>         ┃           │ c at 186:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ False
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a2" FGt <var> <var>
>   
>   ✗ FGt <var> +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatLt 0 c at 188:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 188:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ False
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FGt <var> +0.0
>   
>   ✗ FGt <var> -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatLt -0 c at 190:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 190:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ False
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FGt <var> -0.0
>   
>   ✗ FGt <var> NaN failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatLt NaN c at 192:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 192:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ False
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FGt <var> NaN
>   
>   ✗ FGt +0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatLt c at 194:f 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 194:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ False
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FGt +0.0 <var>
>   
>   ✗ FGt +0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ false
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ False
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FGt +0.0 +0.0
>   
>   ✗ FGt +0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ false
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ False
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FGt +0.0 -0.0
>   
>   ✗ FGt +0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ false
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ False
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FGt +0.0 NaN
>   
>   ✗ FGt -0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatLt c at 196:f -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 196:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ False
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FGt -0.0 <var>
>   
>   ✗ FGt -0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ false
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ False
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FGt -0.0 +0.0
>   
>   ✗ FGt -0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ false
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ False
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FGt -0.0 -0.0
>   
>   ✗ FGt -0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ false
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ False
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FGt -0.0 NaN
>   
>   ✗ FGt NaN <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatLt c at 198:f NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 198:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ False
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FGt NaN <var>
>   
>   ✗ FGt NaN +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ false
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ False
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FGt NaN +0.0
>   
>   ✗ FGt NaN -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ false
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ False
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FGt NaN -0.0
>   
>   ✗ FGt NaN NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ false
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ False
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FGt NaN NaN
>   
>   ✗ <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ c at 200:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 200:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" <var>
>   
>   ✗ +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" +0.0
>   
>   ✗ -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" -0.0
>   
>   ✗ NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" NaN
>   
>   ✗ FloatFromBits <var> failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFromBinary c at 201:bv
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 201:bv |-> 0x0:[32]
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FloatFromBits <var>
>   
>   ✗ FNeg <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatNeg c at 203:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 203:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FNeg <var>
>   
>   ✗ FNeg +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FNeg +0.0
>   
>   ✗ FNeg -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FNeg -0.0
>   
>   ✗ FNeg NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FNeg NaN
>   
>   ✗ FAbs <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatAbs c at 205:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 205:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FAbs <var>
>   
>   ✗ FAbs +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FAbs +0.0
>   
>   ✗ FAbs -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FAbs -0.0
>   
>   ✗ FAbs NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FAbs NaN
>   
>   ✗ FSqrt RNE <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatSqrt RNE c at 207:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 207:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FSqrt RNE <var>
>   
>   ✗ FSqrt RNE +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FSqrt RNE +0.0
>   
>   ✗ FSqrt RNE -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FSqrt RNE -0.0
>   
>   ✗ FSqrt RNE NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FSqrt RNE NaN
>   
>   ✗ FRound RNE <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatRound RNE c at 209:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 209:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FRound RNE <var>
>   
>   ✗ FRound RNE +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FRound RNE +0.0
>   
>   ✗ FRound RNE -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FRound RNE -0.0
>   
>   ✗ FRound RNE NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FRound RNE NaN
>   
>   ✗ FAdd RNE <var> <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 2 shrinks.
>     shrink path: 1:a2
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatAdd RNE c at 211:f c at 212:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 211:f |-> 0 0x0
>         ┃           │ c at 212:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a2" FAdd RNE <var> <var>
>   
>   ✗ FAdd RNE <var> +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatAdd RNE c at 214:f 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 214:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FAdd RNE <var> +0.0
>   
>   ✗ FAdd RNE <var> -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatAdd RNE c at 216:f -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 216:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FAdd RNE <var> -0.0
>   
>   ✗ FAdd RNE <var> NaN failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatAdd RNE c at 218:f NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 218:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FAdd RNE <var> NaN
>   
>   ✗ FAdd RNE +0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatAdd RNE 0 c at 220:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 220:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FAdd RNE +0.0 <var>
>   
>   ✗ FAdd RNE +0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FAdd RNE +0.0 +0.0
>   
>   ✗ FAdd RNE +0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FAdd RNE +0.0 -0.0
>   
>   ✗ FAdd RNE +0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FAdd RNE +0.0 NaN
>   
>   ✗ FAdd RNE -0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatAdd RNE -0 c at 222:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 222:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FAdd RNE -0.0 <var>
>   
>   ✗ FAdd RNE -0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FAdd RNE -0.0 +0.0
>   
>   ✗ FAdd RNE -0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FAdd RNE -0.0 -0.0
>   
>   ✗ FAdd RNE -0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FAdd RNE -0.0 NaN
>   
>   ✗ FAdd RNE NaN <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatAdd RNE NaN c at 224:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 224:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FAdd RNE NaN <var>
>   
>   ✗ FAdd RNE NaN +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FAdd RNE NaN +0.0
>   
>   ✗ FAdd RNE NaN -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FAdd RNE NaN -0.0
>   
>   ✗ FAdd RNE NaN NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FAdd RNE NaN NaN
>   
>   ✗ FSub RNE <var> <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 2 shrinks.
>     shrink path: 1:a2
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatSub RNE c at 226:f c at 227:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 226:f |-> 0 0x0
>         ┃           │ c at 227:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a2" FSub RNE <var> <var>
>   
>   ✗ FSub RNE <var> +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatSub RNE c at 229:f 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 229:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FSub RNE <var> +0.0
>   
>   ✗ FSub RNE <var> -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatSub RNE c at 231:f -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 231:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FSub RNE <var> -0.0
>   
>   ✗ FSub RNE <var> NaN failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatSub RNE c at 233:f NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 233:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FSub RNE <var> NaN
>   
>   ✗ FSub RNE +0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatSub RNE 0 c at 235:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 235:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FSub RNE +0.0 <var>
>   
>   ✗ FSub RNE +0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FSub RNE +0.0 +0.0
>   
>   ✗ FSub RNE +0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FSub RNE +0.0 -0.0
>   
>   ✗ FSub RNE +0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FSub RNE +0.0 NaN
>   
>   ✗ FSub RNE -0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatSub RNE -0 c at 237:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 237:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FSub RNE -0.0 <var>
>   
>   ✗ FSub RNE -0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FSub RNE -0.0 +0.0
>   
>   ✗ FSub RNE -0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FSub RNE -0.0 -0.0
>   
>   ✗ FSub RNE -0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FSub RNE -0.0 NaN
>   
>   ✗ FSub RNE NaN <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatSub RNE NaN c at 239:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 239:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FSub RNE NaN <var>
>   
>   ✗ FSub RNE NaN +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FSub RNE NaN +0.0
>   
>   ✗ FSub RNE NaN -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FSub RNE NaN -0.0
>   
>   ✗ FSub RNE NaN NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FSub RNE NaN NaN
>   
>   ✗ FMul RNE <var> <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 2 shrinks.
>     shrink path: 1:a2
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatMul RNE c at 241:f c at 242:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 241:f |-> 0 0x0
>         ┃           │ c at 242:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a2" FMul RNE <var> <var>
>   
>   ✗ FMul RNE <var> +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatMul RNE c at 244:f 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 244:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMul RNE <var> +0.0
>   
>   ✗ FMul RNE <var> -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatMul RNE c at 246:f -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 246:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMul RNE <var> -0.0
>   
>   ✗ FMul RNE <var> NaN failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatMul RNE c at 248:f NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 248:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMul RNE <var> NaN
>   
>   ✗ FMul RNE +0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatMul RNE 0 c at 250:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 250:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMul RNE +0.0 <var>
>   
>   ✗ FMul RNE +0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMul RNE +0.0 +0.0
>   
>   ✗ FMul RNE +0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMul RNE +0.0 -0.0
>   
>   ✗ FMul RNE +0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMul RNE +0.0 NaN
>   
>   ✗ FMul RNE -0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatMul RNE -0 c at 252:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 252:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMul RNE -0.0 <var>
>   
>   ✗ FMul RNE -0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMul RNE -0.0 +0.0
>   
>   ✗ FMul RNE -0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMul RNE -0.0 -0.0
>   
>   ✗ FMul RNE -0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMul RNE -0.0 NaN
>   
>   ✗ FMul RNE NaN <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatMul RNE NaN c at 254:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 254:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMul RNE NaN <var>
>   
>   ✗ FMul RNE NaN +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMul RNE NaN +0.0
>   
>   ✗ FMul RNE NaN -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMul RNE NaN -0.0
>   
>   ✗ FMul RNE NaN NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMul RNE NaN NaN
>   
>   ✗ FDiv RNE <var> <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 2 shrinks.
>     shrink path: 1:a2
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatDiv RNE c at 256:f c at 257:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 256:f |-> 0 0x0
>         ┃           │ c at 257:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a2" FDiv RNE <var> <var>
>   
>   ✗ FDiv RNE <var> +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatDiv RNE c at 259:f 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 259:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FDiv RNE <var> +0.0
>   
>   ✗ FDiv RNE <var> -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatDiv RNE c at 261:f -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 261:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FDiv RNE <var> -0.0
>   
>   ✗ FDiv RNE <var> NaN failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatDiv RNE c at 263:f NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 263:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FDiv RNE <var> NaN
>   
>   ✗ FDiv RNE +0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatDiv RNE 0 c at 265:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 265:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FDiv RNE +0.0 <var>
>   
>   ✗ FDiv RNE +0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FDiv RNE +0.0 +0.0
>   
>   ✗ FDiv RNE +0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FDiv RNE +0.0 -0.0
>   
>   ✗ FDiv RNE +0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FDiv RNE +0.0 NaN
>   
>   ✗ FDiv RNE -0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatDiv RNE -0 c at 267:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 267:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FDiv RNE -0.0 <var>
>   
>   ✗ FDiv RNE -0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FDiv RNE -0.0 +0.0
>   
>   ✗ FDiv RNE -0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FDiv RNE -0.0 -0.0
>   
>   ✗ FDiv RNE -0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FDiv RNE -0.0 NaN
>   
>   ✗ FDiv RNE NaN <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatDiv RNE NaN c at 269:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 269:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FDiv RNE NaN <var>
>   
>   ✗ FDiv RNE NaN +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FDiv RNE NaN +0.0
>   
>   ✗ FDiv RNE NaN -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FDiv RNE NaN -0.0
>   
>   ✗ FDiv RNE NaN NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FDiv RNE NaN NaN
>   
>   ✗ FRem <var> <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 2 shrinks.
>     shrink path: 1:a2
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatRem c at 271:f c at 272:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 271:f |-> 0 0x0
>         ┃           │ c at 272:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a2" FRem <var> <var>
>   
>   ✗ FRem <var> +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatRem c at 274:f 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 274:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FRem <var> +0.0
>   
>   ✗ FRem <var> -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatRem c at 276:f -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 276:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FRem <var> -0.0
>   
>   ✗ FRem <var> NaN failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatRem c at 278:f NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 278:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FRem <var> NaN
>   
>   ✗ FRem +0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatRem 0 c at 280:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 280:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FRem +0.0 <var>
>   
>   ✗ FRem +0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FRem +0.0 +0.0
>   
>   ✗ FRem +0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FRem +0.0 -0.0
>   
>   ✗ FRem +0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FRem +0.0 NaN
>   
>   ✗ FRem -0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatRem -0 c at 282:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 282:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FRem -0.0 <var>
>   
>   ✗ FRem -0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FRem -0.0 +0.0
>   
>   ✗ FRem -0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FRem -0.0 -0.0
>   
>   ✗ FRem -0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FRem -0.0 NaN
>   
>   ✗ FRem NaN <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatRem NaN c at 284:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 284:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FRem NaN <var>
>   
>   ✗ FRem NaN +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FRem NaN +0.0
>   
>   ✗ FRem NaN -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FRem NaN -0.0
>   
>   ✗ FRem NaN NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FRem NaN NaN
>   
>   ✗ FMin <var> <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 2 shrinks.
>     shrink path: 1:a2
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ let -- :1:0
>         ┃        │     v295 = ite (eq c at 286:f c at 287:f) c at 286:f (ite c at 293:b c at 286:f c at 287:f)
>         ┃        │     -- :1:0
>         ┃        │     v296 = ite (floatLt c at 287:f c at 286:f) c at 287:f v295
>         ┃        │     -- :1:0
>         ┃        │     v297 = ite (floatLt c at 286:f c at 287:f) c at 286:f v296
>         ┃        │     -- :1:0
>         ┃        │     v298 = ite (floatIsNaN c at 287:f) c at 286:f v297
>         ┃        │  in ite (floatIsNaN c at 286:f) c at 287:f v298
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 286:f |-> 0 0x0
>         ┃           │ c at 287:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a2" FMin <var> <var>
>   
>   ✗ FMin <var> +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ let -- :1:0
>         ┃        │     v307 = ite (eq c at 300:f 0) c at 300:f (ite c at 305:b c at 300:f 0)
>         ┃        │     -- :1:0
>         ┃        │     v309 = ite (floatLt c at 300:f 0) c at 300:f (ite (floatLt 0 c at 300:f) 0 v307)
>         ┃        │  in ite (floatIsNaN c at 300:f) 0 v309
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 300:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMin <var> +0.0
>   
>   ✗ FMin <var> -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:b
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ let -- :1:0
>         ┃        │     v318 = ite (eq c at 311:f -0) c at 311:f (ite c at 316:b c at 311:f -0)
>         ┃        │     -- :1:0
>         ┃        │     v319 = ite (floatLt -0 c at 311:f) -0 v318
>         ┃        │     -- :1:0
>         ┃        │     v320 = ite (floatLt c at 311:f -0) c at 311:f v319
>         ┃        │  in ite (floatIsNaN c at 311:f) -0 v320
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 311:f |-> -0 0x80000000
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:b" FMin <var> -0.0
>   
>   ✗ FMin <var> NaN failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ ite (floatIsNaN c at 322:f) NaN c at 322:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 322:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMin <var> NaN
>   
>   ✗ FMin +0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ let -- :1:0
>         ┃        │     v332 = ite (eq 0 c at 325:f) 0 (ite c at 330:b 0 c at 325:f)
>         ┃        │     -- :1:0
>         ┃        │     v334 = ite (floatLt 0 c at 325:f) 0 (ite (floatLt c at 325:f 0) c at 325:f v332)
>         ┃        │  in ite (floatIsNaN c at 325:f) 0 v334
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 325:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMin +0.0 <var>
>   
>   ✗ FMin +0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMin +0.0 +0.0
>   
>   ✓ FMin +0.0 -0.0 passed 1 test.
>   ✗ FMin +0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMin +0.0 NaN
>   
>   ✗ FMin -0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 2 tests and 1 shrink.
>     shrink path: 2:b
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ let -- :1:0
>         ┃        │     v345 = ite (eq -0 c at 338:f) -0 (ite c at 343:b -0 c at 338:f)
>         ┃        │     -- :1:0
>         ┃        │     v346 = ite (floatLt c at 338:f -0) c at 338:f v345
>         ┃        │  in ite (floatIsNaN c at 338:f) -0 (ite (floatLt -0 c at 338:f) -0 v346)
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 338:f |-> -0 0x80000000
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "2:b" FMin -0.0 <var>
>   
>   ✓ FMin -0.0 +0.0 passed 1 test.
>   ✗ FMin -0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMin -0.0 -0.0
>   
>   ✗ FMin -0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMin -0.0 NaN
>   
>   ✗ FMin NaN <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ c at 351:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 351:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMin NaN <var>
>   
>   ✗ FMin NaN +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMin NaN +0.0
>   
>   ✗ FMin NaN -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMin NaN -0.0
>   
>   ✗ FMin NaN NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMin NaN NaN
>   
>   ✗ FMax <var> <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 2 shrinks.
>     shrink path: 1:a2
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ let -- :1:0
>         ┃        │     v361 = ite (eq c at 352:f c at 353:f) c at 352:f (ite c at 359:b c at 352:f c at 353:f)
>         ┃        │     -- :1:0
>         ┃        │     v362 = ite (floatLt c at 353:f c at 352:f) c at 352:f v361
>         ┃        │     -- :1:0
>         ┃        │     v363 = ite (floatLt c at 352:f c at 353:f) c at 353:f v362
>         ┃        │     -- :1:0
>         ┃        │     v364 = ite (floatIsNaN c at 353:f) c at 352:f v363
>         ┃        │  in ite (floatIsNaN c at 352:f) c at 353:f v364
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 352:f |-> 0 0x0
>         ┃           │ c at 353:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a2" FMax <var> <var>
>   
>   ✗ FMax <var> +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ let -- :1:0
>         ┃        │     v373 = ite (eq c at 366:f 0) c at 366:f (ite c at 371:b c at 366:f 0)
>         ┃        │     -- :1:0
>         ┃        │     v375 = ite (floatLt c at 366:f 0) 0 (ite (floatLt 0 c at 366:f) c at 366:f v373)
>         ┃        │  in ite (floatIsNaN c at 366:f) 0 v375
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 366:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMax <var> +0.0
>   
>   ✗ FMax <var> -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:b
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ let -- :1:0
>         ┃        │     v384 = ite (eq c at 377:f -0) c at 377:f (ite c at 382:b c at 377:f -0)
>         ┃        │     -- :1:0
>         ┃        │     v385 = ite (floatLt -0 c at 377:f) c at 377:f v384
>         ┃        │  in ite (floatIsNaN c at 377:f) -0 (ite (floatLt c at 377:f -0) -0 v385)
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 377:f |-> -0 0x80000000
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:b" FMax <var> -0.0
>   
>   ✗ FMax <var> NaN failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ ite (floatIsNaN c at 388:f) NaN c at 388:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 388:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMax <var> NaN
>   
>   ✗ FMax +0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ let -- :1:0
>         ┃        │     v398 = ite (eq 0 c at 391:f) 0 (ite c at 396:b 0 c at 391:f)
>         ┃        │     -- :1:0
>         ┃        │     v400 = ite (floatLt 0 c at 391:f) c at 391:f (ite (floatLt c at 391:f 0) 0 v398)
>         ┃        │  in ite (floatIsNaN c at 391:f) 0 v400
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 391:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMax +0.0 <var>
>   
>   ✗ FMax +0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMax +0.0 +0.0
>   
>   ✓ FMax +0.0 -0.0 passed 1 test.
>   ✗ FMax +0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMax +0.0 NaN
>   
>   ✗ FMax -0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 2 tests and 1 shrink.
>     shrink path: 2:b
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ let -- :1:0
>         ┃        │     v411 = ite (eq -0 c at 404:f) -0 (ite c at 409:b -0 c at 404:f)
>         ┃        │     -- :1:0
>         ┃        │     v412 = ite (floatLt c at 404:f -0) -0 v411
>         ┃        │     -- :1:0
>         ┃        │     v413 = ite (floatLt -0 c at 404:f) c at 404:f v412
>         ┃        │  in ite (floatIsNaN c at 404:f) -0 v413
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 404:f |-> -0 0x80000000
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "2:b" FMax -0.0 <var>
>   
>   ✓ FMax -0.0 +0.0 passed 1 test.
>   ✗ FMax -0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMax -0.0 -0.0
>   
>   ✗ FMax -0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMax -0.0 NaN
>   
>   ✗ FMax NaN <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ c at 417:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 417:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMax NaN <var>
>   
>   ✗ FMax NaN +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMax NaN +0.0
>   
>   ✗ FMax NaN -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMax NaN -0.0
>   
>   ✗ FMax NaN NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMax NaN NaN
>   
>   ✗ FMA RNE <var> <var> <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 3 shrinks.
>     shrink path: 1:a3
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RNE c at 418:f c at 419:f c at 420:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 418:f |-> 0 0x0
>         ┃           │ c at 419:f |-> 0 0x0
>         ┃           │ c at 420:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a3" FMA RNE <var> <var> <var>
>   
>   ✗ FMA RNE <var> <var> +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 2 shrinks.
>     shrink path: 1:a2
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RNE c at 422:f c at 423:f 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 422:f |-> 0 0x0
>         ┃           │ c at 423:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a2" FMA RNE <var> <var> +0.0
>   
>   ✗ FMA RNE <var> <var> -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 2 shrinks.
>     shrink path: 1:a2
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RNE c at 425:f c at 426:f -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 425:f |-> 0 0x0
>         ┃           │ c at 426:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a2" FMA RNE <var> <var> -0.0
>   
>   ✗ FMA RNE <var> <var> NaN failed at test/TestTemplate.hs:656:66
>     after 1 test and 2 shrinks.
>     shrink path: 1:a2
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RNE c at 428:f c at 429:f NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 428:f |-> 0 0x0
>         ┃           │ c at 429:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a2" FMA RNE <var> <var> NaN
>   
>   ✗ FMA RNE <var> +0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 2 shrinks.
>     shrink path: 1:a2
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RNE c at 431:f 0 c at 432:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 431:f |-> 0 0x0
>         ┃           │ c at 432:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a2" FMA RNE <var> +0.0 <var>
>   
>   ✗ FMA RNE <var> +0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RNE c at 434:f 0 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 434:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RNE <var> +0.0 +0.0
>   
>   ✗ FMA RNE <var> +0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RNE c at 436:f 0 -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 436:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RNE <var> +0.0 -0.0
>   
>   ✗ FMA RNE <var> +0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RNE c at 438:f 0 NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 438:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RNE <var> +0.0 NaN
>   
>   ✗ FMA RNE <var> -0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 2 shrinks.
>     shrink path: 1:a2
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RNE c at 440:f -0 c at 441:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 440:f |-> 0 0x0
>         ┃           │ c at 441:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a2" FMA RNE <var> -0.0 <var>
>   
>   ✗ FMA RNE <var> -0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RNE c at 443:f -0 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 443:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RNE <var> -0.0 +0.0
>   
>   ✗ FMA RNE <var> -0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RNE c at 445:f -0 -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 445:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RNE <var> -0.0 -0.0
>   
>   ✗ FMA RNE <var> -0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RNE c at 447:f -0 NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 447:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RNE <var> -0.0 NaN
>   
>   ✗ FMA RNE <var> NaN <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 2 shrinks.
>     shrink path: 1:a2
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RNE c at 449:f NaN c at 450:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 449:f |-> 0 0x0
>         ┃           │ c at 450:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a2" FMA RNE <var> NaN <var>
>   
>   ✗ FMA RNE <var> NaN +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RNE c at 452:f NaN 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 452:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RNE <var> NaN +0.0
>   
>   ✗ FMA RNE <var> NaN -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RNE c at 454:f NaN -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 454:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RNE <var> NaN -0.0
>   
>   ✗ FMA RNE <var> NaN NaN failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RNE c at 456:f NaN NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 456:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RNE <var> NaN NaN
>   
>   ✗ FMA RNE +0.0 <var> <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 2 shrinks.
>     shrink path: 1:a2
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RNE 0 c at 458:f c at 459:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 458:f |-> 0 0x0
>         ┃           │ c at 459:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a2" FMA RNE +0.0 <var> <var>
>   
>   ✗ FMA RNE +0.0 <var> +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RNE 0 c at 461:f 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 461:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RNE +0.0 <var> +0.0
>   
>   ✗ FMA RNE +0.0 <var> -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RNE 0 c at 463:f -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 463:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RNE +0.0 <var> -0.0
>   
>   ✗ FMA RNE +0.0 <var> NaN failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RNE 0 c at 465:f NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 465:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RNE +0.0 <var> NaN
>   
>   ✗ FMA RNE +0.0 +0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RNE 0 0 c at 467:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 467:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RNE +0.0 +0.0 <var>
>   
>   ✗ FMA RNE +0.0 +0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RNE +0.0 +0.0 +0.0
>   
>   ✗ FMA RNE +0.0 +0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RNE +0.0 +0.0 -0.0
>   
>   ✗ FMA RNE +0.0 +0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RNE +0.0 +0.0 NaN
>   
>   ✗ FMA RNE +0.0 -0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RNE 0 -0 c at 469:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 469:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RNE +0.0 -0.0 <var>
>   
>   ✗ FMA RNE +0.0 -0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RNE +0.0 -0.0 +0.0
>   
>   ✗ FMA RNE +0.0 -0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RNE +0.0 -0.0 -0.0
>   
>   ✗ FMA RNE +0.0 -0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RNE +0.0 -0.0 NaN
>   
>   ✗ FMA RNE +0.0 NaN <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RNE 0 NaN c at 471:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 471:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RNE +0.0 NaN <var>
>   
>   ✗ FMA RNE +0.0 NaN +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RNE +0.0 NaN +0.0
>   
>   ✗ FMA RNE +0.0 NaN -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RNE +0.0 NaN -0.0
>   
>   ✗ FMA RNE +0.0 NaN NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RNE +0.0 NaN NaN
>   
>   ✗ FMA RNE -0.0 <var> <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 2 shrinks.
>     shrink path: 1:a2
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RNE -0 c at 473:f c at 474:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 473:f |-> 0 0x0
>         ┃           │ c at 474:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a2" FMA RNE -0.0 <var> <var>
>   
>   ✗ FMA RNE -0.0 <var> +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RNE -0 c at 476:f 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 476:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RNE -0.0 <var> +0.0
>   
>   ✗ FMA RNE -0.0 <var> -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RNE -0 c at 478:f -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 478:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RNE -0.0 <var> -0.0
>   
>   ✗ FMA RNE -0.0 <var> NaN failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RNE -0 c at 480:f NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 480:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RNE -0.0 <var> NaN
>   
>   ✗ FMA RNE -0.0 +0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RNE -0 0 c at 482:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 482:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RNE -0.0 +0.0 <var>
>   
>   ✗ FMA RNE -0.0 +0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RNE -0.0 +0.0 +0.0
>   
>   ✗ FMA RNE -0.0 +0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RNE -0.0 +0.0 -0.0
>   
>   ✗ FMA RNE -0.0 +0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RNE -0.0 +0.0 NaN
>   
>   ✗ FMA RNE -0.0 -0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RNE -0 -0 c at 484:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 484:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RNE -0.0 -0.0 <var>
>   
>   ✗ FMA RNE -0.0 -0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RNE -0.0 -0.0 +0.0
>   
>   ✗ FMA RNE -0.0 -0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RNE -0.0 -0.0 -0.0
>   
>   ✗ FMA RNE -0.0 -0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RNE -0.0 -0.0 NaN
>   
>   ✗ FMA RNE -0.0 NaN <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RNE -0 NaN c at 486:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 486:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RNE -0.0 NaN <var>
>   
>   ✗ FMA RNE -0.0 NaN +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RNE -0.0 NaN +0.0
>   
>   ✗ FMA RNE -0.0 NaN -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RNE -0.0 NaN -0.0
>   
>   ✗ FMA RNE -0.0 NaN NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RNE -0.0 NaN NaN
>   
>   ✗ FMA RNE NaN <var> <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 2 shrinks.
>     shrink path: 1:a2
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RNE NaN c at 488:f c at 489:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 488:f |-> 0 0x0
>         ┃           │ c at 489:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a2" FMA RNE NaN <var> <var>
>   
>   ✗ FMA RNE NaN <var> +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RNE NaN c at 491:f 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 491:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RNE NaN <var> +0.0
>   
>   ✗ FMA RNE NaN <var> -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RNE NaN c at 493:f -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 493:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RNE NaN <var> -0.0
>   
>   ✗ FMA RNE NaN <var> NaN failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RNE NaN c at 495:f NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 495:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RNE NaN <var> NaN
>   
>   ✗ FMA RNE NaN +0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RNE NaN 0 c at 497:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 497:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RNE NaN +0.0 <var>
>   
>   ✗ FMA RNE NaN +0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RNE NaN +0.0 +0.0
>   
>   ✗ FMA RNE NaN +0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RNE NaN +0.0 -0.0
>   
>   ✗ FMA RNE NaN +0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RNE NaN +0.0 NaN
>   
>   ✗ FMA RNE NaN -0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RNE NaN -0 c at 499:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 499:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RNE NaN -0.0 <var>
>   
>   ✗ FMA RNE NaN -0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RNE NaN -0.0 +0.0
>   
>   ✗ FMA RNE NaN -0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RNE NaN -0.0 -0.0
>   
>   ✗ FMA RNE NaN -0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RNE NaN -0.0 NaN
>   
>   ✗ FMA RNE NaN NaN <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RNE NaN NaN c at 501:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 501:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RNE NaN NaN <var>
>   
>   ✗ FMA RNE NaN NaN +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RNE NaN NaN +0.0
>   
>   ✗ FMA RNE NaN NaN -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RNE NaN NaN -0.0
>   
>   ✗ FMA RNE NaN NaN NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RNE NaN NaN NaN
>   
>   ✗ <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ c at 503:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 503:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" <var>
>   
>   ✗ +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" +0.0
>   
>   ✗ -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" -0.0
>   
>   ✗ NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" NaN
>   
>   ✗ FloatFromBits <var> failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFromBinary c at 504:bv
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 504:bv |-> 0x0:[32]
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FloatFromBits <var>
>   
>   ✗ FNeg <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatNeg c at 506:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 506:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FNeg <var>
>   
>   ✗ FNeg +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FNeg +0.0
>   
>   ✗ FNeg -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FNeg -0.0
>   
>   ✗ FNeg NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FNeg NaN
>   
>   ✗ FAbs <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatAbs c at 508:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 508:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FAbs <var>
>   
>   ✗ FAbs +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FAbs +0.0
>   
>   ✗ FAbs -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FAbs -0.0
>   
>   ✗ FAbs NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FAbs NaN
>   
>   ✗ FSqrt RNA <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatSqrt RNA c at 510:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 510:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FSqrt RNA <var>
>   
>   ✗ FSqrt RNA +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FSqrt RNA +0.0
>   
>   ✗ FSqrt RNA -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FSqrt RNA -0.0
>   
>   ✗ FSqrt RNA NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FSqrt RNA NaN
>   
>   ✗ FRound RNA <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatRound RNA c at 512:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 512:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FRound RNA <var>
>   
>   ✗ FRound RNA +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FRound RNA +0.0
>   
>   ✗ FRound RNA -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FRound RNA -0.0
>   
>   ✗ FRound RNA NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FRound RNA NaN
>   
>   ✗ FAdd RNA <var> <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 2 shrinks.
>     shrink path: 1:a2
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatAdd RNA c at 514:f c at 515:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 514:f |-> 0 0x0
>         ┃           │ c at 515:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a2" FAdd RNA <var> <var>
>   
>   ✗ FAdd RNA <var> +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatAdd RNA c at 517:f 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 517:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FAdd RNA <var> +0.0
>   
>   ✗ FAdd RNA <var> -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatAdd RNA c at 519:f -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 519:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FAdd RNA <var> -0.0
>   
>   ✗ FAdd RNA <var> NaN failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatAdd RNA c at 521:f NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 521:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FAdd RNA <var> NaN
>   
>   ✗ FAdd RNA +0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatAdd RNA 0 c at 523:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 523:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FAdd RNA +0.0 <var>
>   
>   ✗ FAdd RNA +0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FAdd RNA +0.0 +0.0
>   
>   ✗ FAdd RNA +0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FAdd RNA +0.0 -0.0
>   
>   ✗ FAdd RNA +0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FAdd RNA +0.0 NaN
>   
>   ✗ FAdd RNA -0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatAdd RNA -0 c at 525:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 525:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FAdd RNA -0.0 <var>
>   
>   ✗ FAdd RNA -0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FAdd RNA -0.0 +0.0
>   
>   ✗ FAdd RNA -0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FAdd RNA -0.0 -0.0
>   
>   ✗ FAdd RNA -0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FAdd RNA -0.0 NaN
>   
>   ✗ FAdd RNA NaN <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatAdd RNA NaN c at 527:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 527:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FAdd RNA NaN <var>
>   
>   ✗ FAdd RNA NaN +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FAdd RNA NaN +0.0
>   
>   ✗ FAdd RNA NaN -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FAdd RNA NaN -0.0
>   
>   ✗ FAdd RNA NaN NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FAdd RNA NaN NaN
>   
>   ✗ FSub RNA <var> <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 2 shrinks.
>     shrink path: 1:a2
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatSub RNA c at 529:f c at 530:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 529:f |-> 0 0x0
>         ┃           │ c at 530:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a2" FSub RNA <var> <var>
>   
>   ✗ FSub RNA <var> +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatSub RNA c at 532:f 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 532:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FSub RNA <var> +0.0
>   
>   ✗ FSub RNA <var> -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatSub RNA c at 534:f -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 534:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FSub RNA <var> -0.0
>   
>   ✗ FSub RNA <var> NaN failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatSub RNA c at 536:f NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 536:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FSub RNA <var> NaN
>   
>   ✗ FSub RNA +0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatSub RNA 0 c at 538:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 538:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FSub RNA +0.0 <var>
>   
>   ✗ FSub RNA +0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FSub RNA +0.0 +0.0
>   
>   ✗ FSub RNA +0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FSub RNA +0.0 -0.0
>   
>   ✗ FSub RNA +0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FSub RNA +0.0 NaN
>   
>   ✗ FSub RNA -0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatSub RNA -0 c at 540:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 540:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FSub RNA -0.0 <var>
>   
>   ✗ FSub RNA -0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FSub RNA -0.0 +0.0
>   
>   ✗ FSub RNA -0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FSub RNA -0.0 -0.0
>   
>   ✗ FSub RNA -0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FSub RNA -0.0 NaN
>   
>   ✗ FSub RNA NaN <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatSub RNA NaN c at 542:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 542:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FSub RNA NaN <var>
>   
>   ✗ FSub RNA NaN +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FSub RNA NaN +0.0
>   
>   ✗ FSub RNA NaN -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FSub RNA NaN -0.0
>   
>   ✗ FSub RNA NaN NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FSub RNA NaN NaN
>   
>   ✗ FMul RNA <var> <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 2 shrinks.
>     shrink path: 1:a2
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatMul RNA c at 544:f c at 545:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 544:f |-> 0 0x0
>         ┃           │ c at 545:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a2" FMul RNA <var> <var>
>   
>   ✗ FMul RNA <var> +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatMul RNA c at 547:f 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 547:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMul RNA <var> +0.0
>   
>   ✗ FMul RNA <var> -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatMul RNA c at 549:f -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 549:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMul RNA <var> -0.0
>   
>   ✗ FMul RNA <var> NaN failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatMul RNA c at 551:f NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 551:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMul RNA <var> NaN
>   
>   ✗ FMul RNA +0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatMul RNA 0 c at 553:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 553:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMul RNA +0.0 <var>
>   
>   ✗ FMul RNA +0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMul RNA +0.0 +0.0
>   
>   ✗ FMul RNA +0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMul RNA +0.0 -0.0
>   
>   ✗ FMul RNA +0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMul RNA +0.0 NaN
>   
>   ✗ FMul RNA -0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatMul RNA -0 c at 555:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 555:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMul RNA -0.0 <var>
>   
>   ✗ FMul RNA -0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMul RNA -0.0 +0.0
>   
>   ✗ FMul RNA -0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMul RNA -0.0 -0.0
>   
>   ✗ FMul RNA -0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMul RNA -0.0 NaN
>   
>   ✗ FMul RNA NaN <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatMul RNA NaN c at 557:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 557:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMul RNA NaN <var>
>   
>   ✗ FMul RNA NaN +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMul RNA NaN +0.0
>   
>   ✗ FMul RNA NaN -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMul RNA NaN -0.0
>   
>   ✗ FMul RNA NaN NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMul RNA NaN NaN
>   
>   ✗ FDiv RNA <var> <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 2 shrinks.
>     shrink path: 1:a2
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatDiv RNA c at 559:f c at 560:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 559:f |-> 0 0x0
>         ┃           │ c at 560:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a2" FDiv RNA <var> <var>
>   
>   ✗ FDiv RNA <var> +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatDiv RNA c at 562:f 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 562:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FDiv RNA <var> +0.0
>   
>   ✗ FDiv RNA <var> -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatDiv RNA c at 564:f -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 564:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FDiv RNA <var> -0.0
>   
>   ✗ FDiv RNA <var> NaN failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatDiv RNA c at 566:f NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 566:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FDiv RNA <var> NaN
>   
>   ✗ FDiv RNA +0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatDiv RNA 0 c at 568:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 568:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FDiv RNA +0.0 <var>
>   
>   ✗ FDiv RNA +0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FDiv RNA +0.0 +0.0
>   
>   ✗ FDiv RNA +0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FDiv RNA +0.0 -0.0
>   
>   ✗ FDiv RNA +0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FDiv RNA +0.0 NaN
>   
>   ✗ FDiv RNA -0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatDiv RNA -0 c at 570:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 570:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FDiv RNA -0.0 <var>
>   
>   ✗ FDiv RNA -0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FDiv RNA -0.0 +0.0
>   
>   ✗ FDiv RNA -0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FDiv RNA -0.0 -0.0
>   
>   ✗ FDiv RNA -0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FDiv RNA -0.0 NaN
>   
>   ✗ FDiv RNA NaN <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatDiv RNA NaN c at 572:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 572:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FDiv RNA NaN <var>
>   
>   ✗ FDiv RNA NaN +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FDiv RNA NaN +0.0
>   
>   ✗ FDiv RNA NaN -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FDiv RNA NaN -0.0
>   
>   ✗ FDiv RNA NaN NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FDiv RNA NaN NaN
>   
>   ✗ FRem <var> <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 2 shrinks.
>     shrink path: 1:a2
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatRem c at 574:f c at 575:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 574:f |-> 0 0x0
>         ┃           │ c at 575:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a2" FRem <var> <var>
>   
>   ✗ FRem <var> +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatRem c at 577:f 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 577:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FRem <var> +0.0
>   
>   ✗ FRem <var> -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatRem c at 579:f -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 579:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FRem <var> -0.0
>   
>   ✗ FRem <var> NaN failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatRem c at 581:f NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 581:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FRem <var> NaN
>   
>   ✗ FRem +0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatRem 0 c at 583:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 583:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FRem +0.0 <var>
>   
>   ✗ FRem +0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FRem +0.0 +0.0
>   
>   ✗ FRem +0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FRem +0.0 -0.0
>   
>   ✗ FRem +0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FRem +0.0 NaN
>   
>   ✗ FRem -0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatRem -0 c at 585:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 585:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FRem -0.0 <var>
>   
>   ✗ FRem -0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FRem -0.0 +0.0
>   
>   ✗ FRem -0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FRem -0.0 -0.0
>   
>   ✗ FRem -0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FRem -0.0 NaN
>   
>   ✗ FRem NaN <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatRem NaN c at 587:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 587:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FRem NaN <var>
>   
>   ✗ FRem NaN +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FRem NaN +0.0
>   
>   ✗ FRem NaN -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FRem NaN -0.0
>   
>   ✗ FRem NaN NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FRem NaN NaN
>   
>   ✗ FMin <var> <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 2 shrinks.
>     shrink path: 1:a2
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ let -- :1:0
>         ┃        │     v598 = ite (eq c at 589:f c at 590:f) c at 589:f (ite c at 596:b c at 589:f c at 590:f)
>         ┃        │     -- :1:0
>         ┃        │     v599 = ite (floatLt c at 590:f c at 589:f) c at 590:f v598
>         ┃        │     -- :1:0
>         ┃        │     v600 = ite (floatLt c at 589:f c at 590:f) c at 589:f v599
>         ┃        │     -- :1:0
>         ┃        │     v601 = ite (floatIsNaN c at 590:f) c at 589:f v600
>         ┃        │  in ite (floatIsNaN c at 589:f) c at 590:f v601
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 589:f |-> 0 0x0
>         ┃           │ c at 590:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a2" FMin <var> <var>
>   
>   ✗ FMin <var> +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ let -- :1:0
>         ┃        │     v610 = ite (eq c at 603:f 0) c at 603:f (ite c at 608:b c at 603:f 0)
>         ┃        │     -- :1:0
>         ┃        │     v612 = ite (floatLt c at 603:f 0) c at 603:f (ite (floatLt 0 c at 603:f) 0 v610)
>         ┃        │  in ite (floatIsNaN c at 603:f) 0 v612
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 603:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMin <var> +0.0
>   
>   ✗ FMin <var> -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:b
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ let -- :1:0
>         ┃        │     v621 = ite (eq c at 614:f -0) c at 614:f (ite c at 619:b c at 614:f -0)
>         ┃        │     -- :1:0
>         ┃        │     v622 = ite (floatLt -0 c at 614:f) -0 v621
>         ┃        │     -- :1:0
>         ┃        │     v623 = ite (floatLt c at 614:f -0) c at 614:f v622
>         ┃        │  in ite (floatIsNaN c at 614:f) -0 v623
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 614:f |-> -0 0x80000000
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:b" FMin <var> -0.0
>   
>   ✗ FMin <var> NaN failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ ite (floatIsNaN c at 625:f) NaN c at 625:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 625:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMin <var> NaN
>   
>   ✗ FMin +0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ let -- :1:0
>         ┃        │     v635 = ite (eq 0 c at 628:f) 0 (ite c at 633:b 0 c at 628:f)
>         ┃        │     -- :1:0
>         ┃        │     v637 = ite (floatLt 0 c at 628:f) 0 (ite (floatLt c at 628:f 0) c at 628:f v635)
>         ┃        │  in ite (floatIsNaN c at 628:f) 0 v637
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 628:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMin +0.0 <var>
>   
>   ✗ FMin +0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMin +0.0 +0.0
>   
>   ✓ FMin +0.0 -0.0 passed 1 test.
>   ✗ FMin +0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMin +0.0 NaN
>   
>   ✗ FMin -0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 2 tests and 1 shrink.
>     shrink path: 2:b
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ let -- :1:0
>         ┃        │     v648 = ite (eq -0 c at 641:f) -0 (ite c at 646:b -0 c at 641:f)
>         ┃        │     -- :1:0
>         ┃        │     v649 = ite (floatLt c at 641:f -0) c at 641:f v648
>         ┃        │  in ite (floatIsNaN c at 641:f) -0 (ite (floatLt -0 c at 641:f) -0 v649)
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 641:f |-> -0 0x80000000
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "2:b" FMin -0.0 <var>
>   
>   ✓ FMin -0.0 +0.0 passed 1 test.
>   ✗ FMin -0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMin -0.0 -0.0
>   
>   ✗ FMin -0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMin -0.0 NaN
>   
>   ✗ FMin NaN <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ c at 654:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 654:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMin NaN <var>
>   
>   ✗ FMin NaN +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMin NaN +0.0
>   
>   ✗ FMin NaN -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMin NaN -0.0
>   
>   ✗ FMin NaN NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMin NaN NaN
>   
>   ✗ FMax <var> <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 2 shrinks.
>     shrink path: 1:a2
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ let -- :1:0
>         ┃        │     v664 = ite (eq c at 655:f c at 656:f) c at 655:f (ite c at 662:b c at 655:f c at 656:f)
>         ┃        │     -- :1:0
>         ┃        │     v665 = ite (floatLt c at 656:f c at 655:f) c at 655:f v664
>         ┃        │     -- :1:0
>         ┃        │     v666 = ite (floatLt c at 655:f c at 656:f) c at 656:f v665
>         ┃        │     -- :1:0
>         ┃        │     v667 = ite (floatIsNaN c at 656:f) c at 655:f v666
>         ┃        │  in ite (floatIsNaN c at 655:f) c at 656:f v667
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 655:f |-> 0 0x0
>         ┃           │ c at 656:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a2" FMax <var> <var>
>   
>   ✗ FMax <var> +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ let -- :1:0
>         ┃        │     v676 = ite (eq c at 669:f 0) c at 669:f (ite c at 674:b c at 669:f 0)
>         ┃        │     -- :1:0
>         ┃        │     v678 = ite (floatLt c at 669:f 0) 0 (ite (floatLt 0 c at 669:f) c at 669:f v676)
>         ┃        │  in ite (floatIsNaN c at 669:f) 0 v678
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 669:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMax <var> +0.0
>   
>   ✗ FMax <var> -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:b
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ let -- :1:0
>         ┃        │     v687 = ite (eq c at 680:f -0) c at 680:f (ite c at 685:b c at 680:f -0)
>         ┃        │     -- :1:0
>         ┃        │     v688 = ite (floatLt -0 c at 680:f) c at 680:f v687
>         ┃        │  in ite (floatIsNaN c at 680:f) -0 (ite (floatLt c at 680:f -0) -0 v688)
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 680:f |-> -0 0x80000000
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:b" FMax <var> -0.0
>   
>   ✗ FMax <var> NaN failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ ite (floatIsNaN c at 691:f) NaN c at 691:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 691:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMax <var> NaN
>   
>   ✗ FMax +0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ let -- :1:0
>         ┃        │     v701 = ite (eq 0 c at 694:f) 0 (ite c at 699:b 0 c at 694:f)
>         ┃        │     -- :1:0
>         ┃        │     v703 = ite (floatLt 0 c at 694:f) c at 694:f (ite (floatLt c at 694:f 0) 0 v701)
>         ┃        │  in ite (floatIsNaN c at 694:f) 0 v703
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 694:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMax +0.0 <var>
>   
>   ✗ FMax +0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMax +0.0 +0.0
>   
>   ✓ FMax +0.0 -0.0 passed 1 test.
>   ✗ FMax +0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMax +0.0 NaN
>   
>   ✗ FMax -0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 2 tests and 1 shrink.
>     shrink path: 2:b
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ let -- :1:0
>         ┃        │     v714 = ite (eq -0 c at 707:f) -0 (ite c at 712:b -0 c at 707:f)
>         ┃        │     -- :1:0
>         ┃        │     v715 = ite (floatLt c at 707:f -0) -0 v714
>         ┃        │     -- :1:0
>         ┃        │     v716 = ite (floatLt -0 c at 707:f) c at 707:f v715
>         ┃        │  in ite (floatIsNaN c at 707:f) -0 v716
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 707:f |-> -0 0x80000000
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "2:b" FMax -0.0 <var>
>   
>   ✓ FMax -0.0 +0.0 passed 1 test.
>   ✗ FMax -0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMax -0.0 -0.0
>   
>   ✗ FMax -0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMax -0.0 NaN
>   
>   ✗ FMax NaN <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ c at 720:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 720:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMax NaN <var>
>   
>   ✗ FMax NaN +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMax NaN +0.0
>   
>   ✗ FMax NaN -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMax NaN -0.0
>   
>   ✗ FMax NaN NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMax NaN NaN
>   
>   ✗ FMA RNA <var> <var> <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 3 shrinks.
>     shrink path: 1:a3
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RNA c at 721:f c at 722:f c at 723:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 721:f |-> 0 0x0
>         ┃           │ c at 722:f |-> 0 0x0
>         ┃           │ c at 723:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a3" FMA RNA <var> <var> <var>
>   
>   ✗ FMA RNA <var> <var> +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 2 shrinks.
>     shrink path: 1:a2
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RNA c at 725:f c at 726:f 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 725:f |-> 0 0x0
>         ┃           │ c at 726:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a2" FMA RNA <var> <var> +0.0
>   
>   ✗ FMA RNA <var> <var> -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 2 shrinks.
>     shrink path: 1:a2
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RNA c at 728:f c at 729:f -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 728:f |-> 0 0x0
>         ┃           │ c at 729:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a2" FMA RNA <var> <var> -0.0
>   
>   ✗ FMA RNA <var> <var> NaN failed at test/TestTemplate.hs:656:66
>     after 1 test and 2 shrinks.
>     shrink path: 1:a2
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RNA c at 731:f c at 732:f NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 731:f |-> 0 0x0
>         ┃           │ c at 732:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a2" FMA RNA <var> <var> NaN
>   
>   ✗ FMA RNA <var> +0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 2 shrinks.
>     shrink path: 1:a2
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RNA c at 734:f 0 c at 735:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 734:f |-> 0 0x0
>         ┃           │ c at 735:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a2" FMA RNA <var> +0.0 <var>
>   
>   ✗ FMA RNA <var> +0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RNA c at 737:f 0 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 737:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RNA <var> +0.0 +0.0
>   
>   ✗ FMA RNA <var> +0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RNA c at 739:f 0 -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 739:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RNA <var> +0.0 -0.0
>   
>   ✗ FMA RNA <var> +0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RNA c at 741:f 0 NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 741:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RNA <var> +0.0 NaN
>   
>   ✗ FMA RNA <var> -0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 2 shrinks.
>     shrink path: 1:a2
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RNA c at 743:f -0 c at 744:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 743:f |-> 0 0x0
>         ┃           │ c at 744:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a2" FMA RNA <var> -0.0 <var>
>   
>   ✗ FMA RNA <var> -0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RNA c at 746:f -0 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 746:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RNA <var> -0.0 +0.0
>   
>   ✗ FMA RNA <var> -0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RNA c at 748:f -0 -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 748:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RNA <var> -0.0 -0.0
>   
>   ✗ FMA RNA <var> -0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RNA c at 750:f -0 NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 750:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RNA <var> -0.0 NaN
>   
>   ✗ FMA RNA <var> NaN <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 2 shrinks.
>     shrink path: 1:a2
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RNA c at 752:f NaN c at 753:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 752:f |-> 0 0x0
>         ┃           │ c at 753:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a2" FMA RNA <var> NaN <var>
>   
>   ✗ FMA RNA <var> NaN +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RNA c at 755:f NaN 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 755:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RNA <var> NaN +0.0
>   
>   ✗ FMA RNA <var> NaN -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RNA c at 757:f NaN -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 757:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RNA <var> NaN -0.0
>   
>   ✗ FMA RNA <var> NaN NaN failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RNA c at 759:f NaN NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 759:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RNA <var> NaN NaN
>   
>   ✗ FMA RNA +0.0 <var> <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 2 shrinks.
>     shrink path: 1:a2
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RNA 0 c at 761:f c at 762:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 761:f |-> 0 0x0
>         ┃           │ c at 762:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a2" FMA RNA +0.0 <var> <var>
>   
>   ✗ FMA RNA +0.0 <var> +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RNA 0 c at 764:f 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 764:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RNA +0.0 <var> +0.0
>   
>   ✗ FMA RNA +0.0 <var> -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RNA 0 c at 766:f -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 766:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RNA +0.0 <var> -0.0
>   
>   ✗ FMA RNA +0.0 <var> NaN failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RNA 0 c at 768:f NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 768:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RNA +0.0 <var> NaN
>   
>   ✗ FMA RNA +0.0 +0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RNA 0 0 c at 770:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 770:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RNA +0.0 +0.0 <var>
>   
>   ✗ FMA RNA +0.0 +0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RNA +0.0 +0.0 +0.0
>   
>   ✗ FMA RNA +0.0 +0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RNA +0.0 +0.0 -0.0
>   
>   ✗ FMA RNA +0.0 +0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RNA +0.0 +0.0 NaN
>   
>   ✗ FMA RNA +0.0 -0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RNA 0 -0 c at 772:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 772:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RNA +0.0 -0.0 <var>
>   
>   ✗ FMA RNA +0.0 -0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RNA +0.0 -0.0 +0.0
>   
>   ✗ FMA RNA +0.0 -0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RNA +0.0 -0.0 -0.0
>   
>   ✗ FMA RNA +0.0 -0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RNA +0.0 -0.0 NaN
>   
>   ✗ FMA RNA +0.0 NaN <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RNA 0 NaN c at 774:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 774:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RNA +0.0 NaN <var>
>   
>   ✗ FMA RNA +0.0 NaN +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RNA +0.0 NaN +0.0
>   
>   ✗ FMA RNA +0.0 NaN -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RNA +0.0 NaN -0.0
>   
>   ✗ FMA RNA +0.0 NaN NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RNA +0.0 NaN NaN
>   
>   ✗ FMA RNA -0.0 <var> <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 2 shrinks.
>     shrink path: 1:a2
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RNA -0 c at 776:f c at 777:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 776:f |-> 0 0x0
>         ┃           │ c at 777:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a2" FMA RNA -0.0 <var> <var>
>   
>   ✗ FMA RNA -0.0 <var> +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RNA -0 c at 779:f 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 779:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RNA -0.0 <var> +0.0
>   
>   ✗ FMA RNA -0.0 <var> -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RNA -0 c at 781:f -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 781:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RNA -0.0 <var> -0.0
>   
>   ✗ FMA RNA -0.0 <var> NaN failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RNA -0 c at 783:f NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 783:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RNA -0.0 <var> NaN
>   
>   ✗ FMA RNA -0.0 +0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RNA -0 0 c at 785:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 785:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RNA -0.0 +0.0 <var>
>   
>   ✗ FMA RNA -0.0 +0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RNA -0.0 +0.0 +0.0
>   
>   ✗ FMA RNA -0.0 +0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RNA -0.0 +0.0 -0.0
>   
>   ✗ FMA RNA -0.0 +0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RNA -0.0 +0.0 NaN
>   
>   ✗ FMA RNA -0.0 -0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RNA -0 -0 c at 787:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 787:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RNA -0.0 -0.0 <var>
>   
>   ✗ FMA RNA -0.0 -0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RNA -0.0 -0.0 +0.0
>   
>   ✗ FMA RNA -0.0 -0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RNA -0.0 -0.0 -0.0
>   
>   ✗ FMA RNA -0.0 -0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RNA -0.0 -0.0 NaN
>   
>   ✗ FMA RNA -0.0 NaN <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RNA -0 NaN c at 789:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 789:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RNA -0.0 NaN <var>
>   
>   ✗ FMA RNA -0.0 NaN +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RNA -0.0 NaN +0.0
>   
>   ✗ FMA RNA -0.0 NaN -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RNA -0.0 NaN -0.0
>   
>   ✗ FMA RNA -0.0 NaN NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RNA -0.0 NaN NaN
>   
>   ✗ FMA RNA NaN <var> <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 2 shrinks.
>     shrink path: 1:a2
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RNA NaN c at 791:f c at 792:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 791:f |-> 0 0x0
>         ┃           │ c at 792:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a2" FMA RNA NaN <var> <var>
>   
>   ✗ FMA RNA NaN <var> +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RNA NaN c at 794:f 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 794:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RNA NaN <var> +0.0
>   
>   ✗ FMA RNA NaN <var> -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RNA NaN c at 796:f -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 796:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RNA NaN <var> -0.0
>   
>   ✗ FMA RNA NaN <var> NaN failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RNA NaN c at 798:f NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 798:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RNA NaN <var> NaN
>   
>   ✗ FMA RNA NaN +0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RNA NaN 0 c at 800:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 800:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RNA NaN +0.0 <var>
>   
>   ✗ FMA RNA NaN +0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RNA NaN +0.0 +0.0
>   
>   ✗ FMA RNA NaN +0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RNA NaN +0.0 -0.0
>   
>   ✗ FMA RNA NaN +0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RNA NaN +0.0 NaN
>   
>   ✗ FMA RNA NaN -0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RNA NaN -0 c at 802:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 802:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RNA NaN -0.0 <var>
>   
>   ✗ FMA RNA NaN -0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RNA NaN -0.0 +0.0
>   
>   ✗ FMA RNA NaN -0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RNA NaN -0.0 -0.0
>   
>   ✗ FMA RNA NaN -0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RNA NaN -0.0 NaN
>   
>   ✗ FMA RNA NaN NaN <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RNA NaN NaN c at 804:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 804:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RNA NaN NaN <var>
>   
>   ✗ FMA RNA NaN NaN +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RNA NaN NaN +0.0
>   
>   ✗ FMA RNA NaN NaN -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RNA NaN NaN -0.0
>   
>   ✗ FMA RNA NaN NaN NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RNA NaN NaN NaN
>   
>   ✗ <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ c at 806:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 806:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" <var>
>   
>   ✗ +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" +0.0
>   
>   ✗ -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" -0.0
>   
>   ✗ NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" NaN
>   
>   ✗ FloatFromBits <var> failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFromBinary c at 807:bv
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 807:bv |-> 0x0:[32]
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FloatFromBits <var>
>   
>   ✗ FNeg <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatNeg c at 809:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 809:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FNeg <var>
>   
>   ✗ FNeg +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FNeg +0.0
>   
>   ✗ FNeg -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FNeg -0.0
>   
>   ✗ FNeg NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FNeg NaN
>   
>   ✗ FAbs <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatAbs c at 811:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 811:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FAbs <var>
>   
>   ✗ FAbs +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FAbs +0.0
>   
>   ✗ FAbs -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FAbs -0.0
>   
>   ✗ FAbs NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FAbs NaN
>   
>   ✗ FSqrt RTP <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatSqrt RTP c at 813:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 813:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FSqrt RTP <var>
>   
>   ✗ FSqrt RTP +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FSqrt RTP +0.0
>   
>   ✗ FSqrt RTP -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FSqrt RTP -0.0
>   
>   ✗ FSqrt RTP NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FSqrt RTP NaN
>   
>   ✗ FRound RTP <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatRound RTP c at 815:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 815:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FRound RTP <var>
>   
>   ✗ FRound RTP +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FRound RTP +0.0
>   
>   ✗ FRound RTP -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FRound RTP -0.0
>   
>   ✗ FRound RTP NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FRound RTP NaN
>   
>   ✗ FAdd RTP <var> <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 2 shrinks.
>     shrink path: 1:a2
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatAdd RTP c at 817:f c at 818:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 817:f |-> 0 0x0
>         ┃           │ c at 818:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a2" FAdd RTP <var> <var>
>   
>   ✗ FAdd RTP <var> +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatAdd RTP c at 820:f 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 820:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FAdd RTP <var> +0.0
>   
>   ✗ FAdd RTP <var> -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatAdd RTP c at 822:f -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 822:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FAdd RTP <var> -0.0
>   
>   ✗ FAdd RTP <var> NaN failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatAdd RTP c at 824:f NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 824:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FAdd RTP <var> NaN
>   
>   ✗ FAdd RTP +0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatAdd RTP 0 c at 826:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 826:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FAdd RTP +0.0 <var>
>   
>   ✗ FAdd RTP +0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FAdd RTP +0.0 +0.0
>   
>   ✗ FAdd RTP +0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hFlush: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FAdd RTP +0.0 -0.0
>   
>   ✗ FAdd RTP +0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FAdd RTP +0.0 NaN
>   
>   ✗ FAdd RTP -0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatAdd RTP -0 c at 828:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 828:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FAdd RTP -0.0 <var>
>   
>   ✗ FAdd RTP -0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FAdd RTP -0.0 +0.0
>   
>   ✗ FAdd RTP -0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FAdd RTP -0.0 -0.0
>   
>   ✗ FAdd RTP -0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FAdd RTP -0.0 NaN
>   
>   ✗ FAdd RTP NaN <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatAdd RTP NaN c at 830:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 830:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FAdd RTP NaN <var>
>   
>   ✗ FAdd RTP NaN +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FAdd RTP NaN +0.0
>   
>   ✗ FAdd RTP NaN -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FAdd RTP NaN -0.0
>   
>   ✗ FAdd RTP NaN NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FAdd RTP NaN NaN
>   
>   ✗ FSub RTP <var> <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 2 shrinks.
>     shrink path: 1:a2
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatSub RTP c at 832:f c at 833:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 832:f |-> 0 0x0
>         ┃           │ c at 833:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a2" FSub RTP <var> <var>
>   
>   ✗ FSub RTP <var> +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatSub RTP c at 835:f 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 835:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FSub RTP <var> +0.0
>   
>   ✗ FSub RTP <var> -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatSub RTP c at 837:f -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 837:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FSub RTP <var> -0.0
>   
>   ✗ FSub RTP <var> NaN failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatSub RTP c at 839:f NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 839:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FSub RTP <var> NaN
>   
>   ✗ FSub RTP +0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatSub RTP 0 c at 841:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 841:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FSub RTP +0.0 <var>
>   
>   ✗ FSub RTP +0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FSub RTP +0.0 +0.0
>   
>   ✗ FSub RTP +0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FSub RTP +0.0 -0.0
>   
>   ✗ FSub RTP +0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FSub RTP +0.0 NaN
>   
>   ✗ FSub RTP -0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatSub RTP -0 c at 843:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 843:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FSub RTP -0.0 <var>
>   
>   ✗ FSub RTP -0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FSub RTP -0.0 +0.0
>   
>   ✗ FSub RTP -0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FSub RTP -0.0 -0.0
>   
>   ✗ FSub RTP -0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FSub RTP -0.0 NaN
>   
>   ✗ FSub RTP NaN <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatSub RTP NaN c at 845:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 845:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FSub RTP NaN <var>
>   
>   ✗ FSub RTP NaN +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FSub RTP NaN +0.0
>   
>   ✗ FSub RTP NaN -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FSub RTP NaN -0.0
>   
>   ✗ FSub RTP NaN NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FSub RTP NaN NaN
>   
>   ✗ FMul RTP <var> <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 2 shrinks.
>     shrink path: 1:a2
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatMul RTP c at 847:f c at 848:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 847:f |-> 0 0x0
>         ┃           │ c at 848:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a2" FMul RTP <var> <var>
>   
>   ✗ FMul RTP <var> +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatMul RTP c at 850:f 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 850:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMul RTP <var> +0.0
>   
>   ✗ FMul RTP <var> -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatMul RTP c at 852:f -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 852:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMul RTP <var> -0.0
>   
>   ✗ FMul RTP <var> NaN failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatMul RTP c at 854:f NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 854:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMul RTP <var> NaN
>   
>   ✗ FMul RTP +0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatMul RTP 0 c at 856:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 856:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMul RTP +0.0 <var>
>   
>   ✗ FMul RTP +0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMul RTP +0.0 +0.0
>   
>   ✗ FMul RTP +0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMul RTP +0.0 -0.0
>   
>   ✗ FMul RTP +0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMul RTP +0.0 NaN
>   
>   ✗ FMul RTP -0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatMul RTP -0 c at 858:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 858:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMul RTP -0.0 <var>
>   
>   ✗ FMul RTP -0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMul RTP -0.0 +0.0
>   
>   ✗ FMul RTP -0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMul RTP -0.0 -0.0
>   
>   ✗ FMul RTP -0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMul RTP -0.0 NaN
>   
>   ✗ FMul RTP NaN <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatMul RTP NaN c at 860:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 860:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMul RTP NaN <var>
>   
>   ✗ FMul RTP NaN +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMul RTP NaN +0.0
>   
>   ✗ FMul RTP NaN -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMul RTP NaN -0.0
>   
>   ✗ FMul RTP NaN NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMul RTP NaN NaN
>   
>   ✗ FDiv RTP <var> <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 2 shrinks.
>     shrink path: 1:a2
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatDiv RTP c at 862:f c at 863:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 862:f |-> 0 0x0
>         ┃           │ c at 863:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a2" FDiv RTP <var> <var>
>   
>   ✗ FDiv RTP <var> +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatDiv RTP c at 865:f 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 865:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FDiv RTP <var> +0.0
>   
>   ✗ FDiv RTP <var> -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatDiv RTP c at 867:f -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 867:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FDiv RTP <var> -0.0
>   
>   ✗ FDiv RTP <var> NaN failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatDiv RTP c at 869:f NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 869:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FDiv RTP <var> NaN
>   
>   ✗ FDiv RTP +0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatDiv RTP 0 c at 871:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 871:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FDiv RTP +0.0 <var>
>   
>   ✗ FDiv RTP +0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FDiv RTP +0.0 +0.0
>   
>   ✗ FDiv RTP +0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FDiv RTP +0.0 -0.0
>   
>   ✗ FDiv RTP +0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FDiv RTP +0.0 NaN
>   
>   ✗ FDiv RTP -0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatDiv RTP -0 c at 873:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 873:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FDiv RTP -0.0 <var>
>   
>   ✗ FDiv RTP -0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FDiv RTP -0.0 +0.0
>   
>   ✗ FDiv RTP -0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FDiv RTP -0.0 -0.0
>   
>   ✗ FDiv RTP -0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FDiv RTP -0.0 NaN
>   
>   ✗ FDiv RTP NaN <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatDiv RTP NaN c at 875:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 875:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FDiv RTP NaN <var>
>   
>   ✗ FDiv RTP NaN +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FDiv RTP NaN +0.0
>   
>   ✗ FDiv RTP NaN -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FDiv RTP NaN -0.0
>   
>   ✗ FDiv RTP NaN NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FDiv RTP NaN NaN
>   
>   ✗ FRem <var> <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 2 shrinks.
>     shrink path: 1:a2
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatRem c at 877:f c at 878:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 877:f |-> 0 0x0
>         ┃           │ c at 878:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a2" FRem <var> <var>
>   
>   ✗ FRem <var> +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatRem c at 880:f 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 880:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FRem <var> +0.0
>   
>   ✗ FRem <var> -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatRem c at 882:f -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 882:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FRem <var> -0.0
>   
>   ✗ FRem <var> NaN failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatRem c at 884:f NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 884:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FRem <var> NaN
>   
>   ✗ FRem +0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatRem 0 c at 886:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 886:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FRem +0.0 <var>
>   
>   ✗ FRem +0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FRem +0.0 +0.0
>   
>   ✗ FRem +0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FRem +0.0 -0.0
>   
>   ✗ FRem +0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FRem +0.0 NaN
>   
>   ✗ FRem -0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatRem -0 c at 888:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 888:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FRem -0.0 <var>
>   
>   ✗ FRem -0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FRem -0.0 +0.0
>   
>   ✗ FRem -0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FRem -0.0 -0.0
>   
>   ✗ FRem -0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FRem -0.0 NaN
>   
>   ✗ FRem NaN <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatRem NaN c at 890:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 890:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FRem NaN <var>
>   
>   ✗ FRem NaN +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FRem NaN +0.0
>   
>   ✗ FRem NaN -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FRem NaN -0.0
>   
>   ✗ FRem NaN NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FRem NaN NaN
>   
>   ✗ FMin <var> <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 2 shrinks.
>     shrink path: 1:a2
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ let -- :1:0
>         ┃        │     v901 = ite (eq c at 892:f c at 893:f) c at 892:f (ite c at 899:b c at 892:f c at 893:f)
>         ┃        │     -- :1:0
>         ┃        │     v902 = ite (floatLt c at 893:f c at 892:f) c at 893:f v901
>         ┃        │     -- :1:0
>         ┃        │     v903 = ite (floatLt c at 892:f c at 893:f) c at 892:f v902
>         ┃        │     -- :1:0
>         ┃        │     v904 = ite (floatIsNaN c at 893:f) c at 892:f v903
>         ┃        │  in ite (floatIsNaN c at 892:f) c at 893:f v904
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 892:f |-> 0 0x0
>         ┃           │ c at 893:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a2" FMin <var> <var>
>   
>   ✗ FMin <var> +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ let -- :1:0
>         ┃        │     v913 = ite (eq c at 906:f 0) c at 906:f (ite c at 911:b c at 906:f 0)
>         ┃        │     -- :1:0
>         ┃        │     v915 = ite (floatLt c at 906:f 0) c at 906:f (ite (floatLt 0 c at 906:f) 0 v913)
>         ┃        │  in ite (floatIsNaN c at 906:f) 0 v915
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 906:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMin <var> +0.0
>   
>   ✗ FMin <var> -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:b
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ let -- :1:0
>         ┃        │     v924 = ite (eq c at 917:f -0) c at 917:f (ite c at 922:b c at 917:f -0)
>         ┃        │     -- :1:0
>         ┃        │     v925 = ite (floatLt -0 c at 917:f) -0 v924
>         ┃        │     -- :1:0
>         ┃        │     v926 = ite (floatLt c at 917:f -0) c at 917:f v925
>         ┃        │  in ite (floatIsNaN c at 917:f) -0 v926
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 917:f |-> -0 0x80000000
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:b" FMin <var> -0.0
>   
>   ✗ FMin <var> NaN failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ ite (floatIsNaN c at 928:f) NaN c at 928:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 928:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMin <var> NaN
>   
>   ✗ FMin +0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ let -- :1:0
>         ┃        │     v938 = ite (eq 0 c at 931:f) 0 (ite c at 936:b 0 c at 931:f)
>         ┃        │     -- :1:0
>         ┃        │     v940 = ite (floatLt 0 c at 931:f) 0 (ite (floatLt c at 931:f 0) c at 931:f v938)
>         ┃        │  in ite (floatIsNaN c at 931:f) 0 v940
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 931:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMin +0.0 <var>
>   
>   ✗ FMin +0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMin +0.0 +0.0
>   
>   ✓ FMin +0.0 -0.0 passed 1 test.
>   ✗ FMin +0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMin +0.0 NaN
>   
>   ✗ FMin -0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 2 tests and 1 shrink.
>     shrink path: 2:b
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ let -- :1:0
>         ┃        │     v951 = ite (eq -0 c at 944:f) -0 (ite c at 949:b -0 c at 944:f)
>         ┃        │     -- :1:0
>         ┃        │     v952 = ite (floatLt c at 944:f -0) c at 944:f v951
>         ┃        │  in ite (floatIsNaN c at 944:f) -0 (ite (floatLt -0 c at 944:f) -0 v952)
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 944:f |-> -0 0x80000000
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "2:b" FMin -0.0 <var>
>   
>   ✓ FMin -0.0 +0.0 passed 1 test.
>   ✗ FMin -0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMin -0.0 -0.0
>   
>   ✗ FMin -0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMin -0.0 NaN
>   
>   ✗ FMin NaN <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ c at 957:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 957:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMin NaN <var>
>   
>   ✗ FMin NaN +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMin NaN +0.0
>   
>   ✗ FMin NaN -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMin NaN -0.0
>   
>   ✗ FMin NaN NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMin NaN NaN
>   
>   ✗ FMax <var> <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 2 shrinks.
>     shrink path: 1:a2
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ let -- :1:0
>         ┃        │     v967 = ite (eq c at 958:f c at 959:f) c at 958:f (ite c at 965:b c at 958:f c at 959:f)
>         ┃        │     -- :1:0
>         ┃        │     v968 = ite (floatLt c at 959:f c at 958:f) c at 958:f v967
>         ┃        │     -- :1:0
>         ┃        │     v969 = ite (floatLt c at 958:f c at 959:f) c at 959:f v968
>         ┃        │     -- :1:0
>         ┃        │     v970 = ite (floatIsNaN c at 959:f) c at 958:f v969
>         ┃        │  in ite (floatIsNaN c at 958:f) c at 959:f v970
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 958:f |-> 0 0x0
>         ┃           │ c at 959:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a2" FMax <var> <var>
>   
>   ✗ FMax <var> +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ let -- :1:0
>         ┃        │     v979 = ite (eq c at 972:f 0) c at 972:f (ite c at 977:b c at 972:f 0)
>         ┃        │     -- :1:0
>         ┃        │     v981 = ite (floatLt c at 972:f 0) 0 (ite (floatLt 0 c at 972:f) c at 972:f v979)
>         ┃        │  in ite (floatIsNaN c at 972:f) 0 v981
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 972:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMax <var> +0.0
>   
>   ✗ FMax <var> -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:b
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ let -- :1:0
>         ┃        │     v990 = ite (eq c at 983:f -0) c at 983:f (ite c at 988:b c at 983:f -0)
>         ┃        │     -- :1:0
>         ┃        │     v991 = ite (floatLt -0 c at 983:f) c at 983:f v990
>         ┃        │  in ite (floatIsNaN c at 983:f) -0 (ite (floatLt c at 983:f -0) -0 v991)
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 983:f |-> -0 0x80000000
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:b" FMax <var> -0.0
>   
>   ✗ FMax <var> NaN failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ ite (floatIsNaN c at 994:f) NaN c at 994:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 994:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMax <var> NaN
>   
>   ✗ FMax +0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ let -- :1:0
>         ┃        │     v1004 = ite (eq 0 c at 997:f) 0 (ite c at 1002:b 0 c at 997:f)
>         ┃        │     -- :1:0
>         ┃        │     v1006 = ite (floatLt 0 c at 997:f) c at 997:f (ite (floatLt c at 997:f 0) 0 v1004)
>         ┃        │  in ite (floatIsNaN c at 997:f) 0 v1006
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 997:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMax +0.0 <var>
>   
>   ✗ FMax +0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMax +0.0 +0.0
>   
>   ✓ FMax +0.0 -0.0 passed 1 test.
>   ✗ FMax +0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMax +0.0 NaN
>   
>   ✗ FMax -0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 2 tests and 1 shrink.
>     shrink path: 2:b
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ let -- :1:0
>         ┃        │     v1017 = ite (eq -0 c at 1010:f) -0 (ite c at 1015:b -0 c at 1010:f)
>         ┃        │     -- :1:0
>         ┃        │     v1018 = ite (floatLt c at 1010:f -0) -0 v1017
>         ┃        │     -- :1:0
>         ┃        │     v1019 = ite (floatLt -0 c at 1010:f) c at 1010:f v1018
>         ┃        │  in ite (floatIsNaN c at 1010:f) -0 v1019
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1010:f |-> -0 0x80000000
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "2:b" FMax -0.0 <var>
>   
>   ✓ FMax -0.0 +0.0 passed 1 test.
>   ✗ FMax -0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMax -0.0 -0.0
>   
>   ✗ FMax -0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMax -0.0 NaN
>   
>   ✗ FMax NaN <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ c at 1023:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1023:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMax NaN <var>
>   
>   ✗ FMax NaN +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMax NaN +0.0
>   
>   ✗ FMax NaN -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMax NaN -0.0
>   
>   ✗ FMax NaN NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMax NaN NaN
>   
>   ✗ FMA RTP <var> <var> <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 3 shrinks.
>     shrink path: 1:a3
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RTP c at 1024:f c at 1025:f c at 1026:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1024:f |-> 0 0x0
>         ┃           │ c at 1025:f |-> 0 0x0
>         ┃           │ c at 1026:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a3" FMA RTP <var> <var> <var>
>   
>   ✗ FMA RTP <var> <var> +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 2 shrinks.
>     shrink path: 1:a2
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RTP c at 1028:f c at 1029:f 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1028:f |-> 0 0x0
>         ┃           │ c at 1029:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a2" FMA RTP <var> <var> +0.0
>   
>   ✗ FMA RTP <var> <var> -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 2 shrinks.
>     shrink path: 1:a2
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RTP c at 1031:f c at 1032:f -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1031:f |-> 0 0x0
>         ┃           │ c at 1032:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a2" FMA RTP <var> <var> -0.0
>   
>   ✗ FMA RTP <var> <var> NaN failed at test/TestTemplate.hs:656:66
>     after 1 test and 2 shrinks.
>     shrink path: 1:a2
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RTP c at 1034:f c at 1035:f NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1034:f |-> 0 0x0
>         ┃           │ c at 1035:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a2" FMA RTP <var> <var> NaN
>   
>   ✗ FMA RTP <var> +0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 2 shrinks.
>     shrink path: 1:a2
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RTP c at 1037:f 0 c at 1038:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1037:f |-> 0 0x0
>         ┃           │ c at 1038:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a2" FMA RTP <var> +0.0 <var>
>   
>   ✗ FMA RTP <var> +0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RTP c at 1040:f 0 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1040:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RTP <var> +0.0 +0.0
>   
>   ✗ FMA RTP <var> +0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RTP c at 1042:f 0 -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1042:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RTP <var> +0.0 -0.0
>   
>   ✗ FMA RTP <var> +0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RTP c at 1044:f 0 NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1044:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RTP <var> +0.0 NaN
>   
>   ✗ FMA RTP <var> -0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 2 shrinks.
>     shrink path: 1:a2
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RTP c at 1046:f -0 c at 1047:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1046:f |-> 0 0x0
>         ┃           │ c at 1047:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a2" FMA RTP <var> -0.0 <var>
>   
>   ✗ FMA RTP <var> -0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RTP c at 1049:f -0 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1049:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RTP <var> -0.0 +0.0
>   
>   ✗ FMA RTP <var> -0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RTP c at 1051:f -0 -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1051:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RTP <var> -0.0 -0.0
>   
>   ✗ FMA RTP <var> -0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RTP c at 1053:f -0 NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1053:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RTP <var> -0.0 NaN
>   
>   ✗ FMA RTP <var> NaN <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 2 shrinks.
>     shrink path: 1:a2
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RTP c at 1055:f NaN c at 1056:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1055:f |-> 0 0x0
>         ┃           │ c at 1056:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a2" FMA RTP <var> NaN <var>
>   
>   ✗ FMA RTP <var> NaN +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RTP c at 1058:f NaN 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1058:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RTP <var> NaN +0.0
>   
>   ✗ FMA RTP <var> NaN -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RTP c at 1060:f NaN -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1060:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RTP <var> NaN -0.0
>   
>   ✗ FMA RTP <var> NaN NaN failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RTP c at 1062:f NaN NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1062:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RTP <var> NaN NaN
>   
>   ✗ FMA RTP +0.0 <var> <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 2 shrinks.
>     shrink path: 1:a2
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RTP 0 c at 1064:f c at 1065:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1064:f |-> 0 0x0
>         ┃           │ c at 1065:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a2" FMA RTP +0.0 <var> <var>
>   
>   ✗ FMA RTP +0.0 <var> +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RTP 0 c at 1067:f 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1067:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RTP +0.0 <var> +0.0
>   
>   ✗ FMA RTP +0.0 <var> -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RTP 0 c at 1069:f -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1069:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RTP +0.0 <var> -0.0
>   
>   ✗ FMA RTP +0.0 <var> NaN failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RTP 0 c at 1071:f NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1071:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RTP +0.0 <var> NaN
>   
>   ✗ FMA RTP +0.0 +0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RTP 0 0 c at 1073:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1073:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RTP +0.0 +0.0 <var>
>   
>   ✗ FMA RTP +0.0 +0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RTP +0.0 +0.0 +0.0
>   
>   ✗ FMA RTP +0.0 +0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RTP +0.0 +0.0 -0.0
>   
>   ✗ FMA RTP +0.0 +0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RTP +0.0 +0.0 NaN
>   
>   ✗ FMA RTP +0.0 -0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RTP 0 -0 c at 1075:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1075:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RTP +0.0 -0.0 <var>
>   
>   ✗ FMA RTP +0.0 -0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RTP +0.0 -0.0 +0.0
>   
>   ✗ FMA RTP +0.0 -0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RTP +0.0 -0.0 -0.0
>   
>   ✗ FMA RTP +0.0 -0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RTP +0.0 -0.0 NaN
>   
>   ✗ FMA RTP +0.0 NaN <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RTP 0 NaN c at 1077:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1077:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RTP +0.0 NaN <var>
>   
>   ✗ FMA RTP +0.0 NaN +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RTP +0.0 NaN +0.0
>   
>   ✗ FMA RTP +0.0 NaN -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RTP +0.0 NaN -0.0
>   
>   ✗ FMA RTP +0.0 NaN NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RTP +0.0 NaN NaN
>   
>   ✗ FMA RTP -0.0 <var> <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 2 shrinks.
>     shrink path: 1:a2
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RTP -0 c at 1079:f c at 1080:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1079:f |-> 0 0x0
>         ┃           │ c at 1080:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a2" FMA RTP -0.0 <var> <var>
>   
>   ✗ FMA RTP -0.0 <var> +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RTP -0 c at 1082:f 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1082:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RTP -0.0 <var> +0.0
>   
>   ✗ FMA RTP -0.0 <var> -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RTP -0 c at 1084:f -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1084:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RTP -0.0 <var> -0.0
>   
>   ✗ FMA RTP -0.0 <var> NaN failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RTP -0 c at 1086:f NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1086:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RTP -0.0 <var> NaN
>   
>   ✗ FMA RTP -0.0 +0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RTP -0 0 c at 1088:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1088:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RTP -0.0 +0.0 <var>
>   
>   ✗ FMA RTP -0.0 +0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RTP -0.0 +0.0 +0.0
>   
>   ✗ FMA RTP -0.0 +0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RTP -0.0 +0.0 -0.0
>   
>   ✗ FMA RTP -0.0 +0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RTP -0.0 +0.0 NaN
>   
>   ✗ FMA RTP -0.0 -0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RTP -0 -0 c at 1090:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1090:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RTP -0.0 -0.0 <var>
>   
>   ✗ FMA RTP -0.0 -0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RTP -0.0 -0.0 +0.0
>   
>   ✗ FMA RTP -0.0 -0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RTP -0.0 -0.0 -0.0
>   
>   ✗ FMA RTP -0.0 -0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RTP -0.0 -0.0 NaN
>   
>   ✗ FMA RTP -0.0 NaN <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RTP -0 NaN c at 1092:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1092:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RTP -0.0 NaN <var>
>   
>   ✗ FMA RTP -0.0 NaN +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RTP -0.0 NaN +0.0
>   
>   ✗ FMA RTP -0.0 NaN -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RTP -0.0 NaN -0.0
>   
>   ✗ FMA RTP -0.0 NaN NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RTP -0.0 NaN NaN
>   
>   ✗ FMA RTP NaN <var> <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 2 shrinks.
>     shrink path: 1:a2
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RTP NaN c at 1094:f c at 1095:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1094:f |-> 0 0x0
>         ┃           │ c at 1095:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a2" FMA RTP NaN <var> <var>
>   
>   ✗ FMA RTP NaN <var> +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RTP NaN c at 1097:f 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1097:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RTP NaN <var> +0.0
>   
>   ✗ FMA RTP NaN <var> -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RTP NaN c at 1099:f -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1099:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RTP NaN <var> -0.0
>   
>   ✗ FMA RTP NaN <var> NaN failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RTP NaN c at 1101:f NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1101:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RTP NaN <var> NaN
>   
>   ✗ FMA RTP NaN +0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RTP NaN 0 c at 1103:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1103:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RTP NaN +0.0 <var>
>   
>   ✗ FMA RTP NaN +0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RTP NaN +0.0 +0.0
>   
>   ✗ FMA RTP NaN +0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RTP NaN +0.0 -0.0
>   
>   ✗ FMA RTP NaN +0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RTP NaN +0.0 NaN
>   
>   ✗ FMA RTP NaN -0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RTP NaN -0 c at 1105:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1105:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RTP NaN -0.0 <var>
>   
>   ✗ FMA RTP NaN -0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RTP NaN -0.0 +0.0
>   
>   ✗ FMA RTP NaN -0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RTP NaN -0.0 -0.0
>   
>   ✗ FMA RTP NaN -0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RTP NaN -0.0 NaN
>   
>   ✗ FMA RTP NaN NaN <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RTP NaN NaN c at 1107:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1107:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RTP NaN NaN <var>
>   
>   ✗ FMA RTP NaN NaN +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RTP NaN NaN +0.0
>   
>   ✗ FMA RTP NaN NaN -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RTP NaN NaN -0.0
>   
>   ✗ FMA RTP NaN NaN NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RTP NaN NaN NaN
>   
>   ✗ <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ c at 1109:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1109:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" <var>
>   
>   ✗ +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" +0.0
>   
>   ✗ -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" -0.0
>   
>   ✗ NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" NaN
>   
>   ✗ FloatFromBits <var> failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFromBinary c at 1110:bv
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1110:bv |-> 0x0:[32]
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FloatFromBits <var>
>   
>   ✗ FNeg <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatNeg c at 1112:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1112:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FNeg <var>
>   
>   ✗ FNeg +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FNeg +0.0
>   
>   ✗ FNeg -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FNeg -0.0
>   
>   ✗ FNeg NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FNeg NaN
>   
>   ✗ FAbs <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatAbs c at 1114:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1114:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FAbs <var>
>   
>   ✗ FAbs +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FAbs +0.0
>   
>   ✗ FAbs -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FAbs -0.0
>   
>   ✗ FAbs NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FAbs NaN
>   
>   ✗ FSqrt RTN <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatSqrt RTN c at 1116:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1116:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FSqrt RTN <var>
>   
>   ✗ FSqrt RTN +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FSqrt RTN +0.0
>   
>   ✗ FSqrt RTN -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FSqrt RTN -0.0
>   
>   ✗ FSqrt RTN NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FSqrt RTN NaN
>   
>   ✗ FRound RTN <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatRound RTN c at 1118:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1118:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FRound RTN <var>
>   
>   ✗ FRound RTN +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FRound RTN +0.0
>   
>   ✗ FRound RTN -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FRound RTN -0.0
>   
>   ✗ FRound RTN NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FRound RTN NaN
>   
>   ✗ FAdd RTN <var> <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 2 shrinks.
>     shrink path: 1:a2
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatAdd RTN c at 1120:f c at 1121:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1120:f |-> 0 0x0
>         ┃           │ c at 1121:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a2" FAdd RTN <var> <var>
>   
>   ✗ FAdd RTN <var> +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatAdd RTN c at 1123:f 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1123:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FAdd RTN <var> +0.0
>   
>   ✗ FAdd RTN <var> -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatAdd RTN c at 1125:f -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1125:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FAdd RTN <var> -0.0
>   
>   ✗ FAdd RTN <var> NaN failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatAdd RTN c at 1127:f NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1127:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FAdd RTN <var> NaN
>   
>   ✗ FAdd RTN +0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatAdd RTN 0 c at 1129:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1129:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FAdd RTN +0.0 <var>
>   
>   ✗ FAdd RTN +0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FAdd RTN +0.0 +0.0
>   
>   ✗ FAdd RTN +0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FAdd RTN +0.0 -0.0
>   
>   ✗ FAdd RTN +0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FAdd RTN +0.0 NaN
>   
>   ✗ FAdd RTN -0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatAdd RTN -0 c at 1131:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1131:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FAdd RTN -0.0 <var>
>   
>   ✗ FAdd RTN -0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FAdd RTN -0.0 +0.0
>   
>   ✗ FAdd RTN -0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FAdd RTN -0.0 -0.0
>   
>   ✗ FAdd RTN -0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FAdd RTN -0.0 NaN
>   
>   ✗ FAdd RTN NaN <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatAdd RTN NaN c at 1133:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1133:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FAdd RTN NaN <var>
>   
>   ✗ FAdd RTN NaN +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FAdd RTN NaN +0.0
>   
>   ✗ FAdd RTN NaN -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FAdd RTN NaN -0.0
>   
>   ✗ FAdd RTN NaN NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FAdd RTN NaN NaN
>   
>   ✗ FSub RTN <var> <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 2 shrinks.
>     shrink path: 1:a2
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatSub RTN c at 1135:f c at 1136:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1135:f |-> 0 0x0
>         ┃           │ c at 1136:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a2" FSub RTN <var> <var>
>   
>   ✗ FSub RTN <var> +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatSub RTN c at 1138:f 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1138:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FSub RTN <var> +0.0
>   
>   ✗ FSub RTN <var> -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatSub RTN c at 1140:f -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1140:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FSub RTN <var> -0.0
>   
>   ✗ FSub RTN <var> NaN failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatSub RTN c at 1142:f NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1142:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FSub RTN <var> NaN
>   
>   ✗ FSub RTN +0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatSub RTN 0 c at 1144:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1144:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FSub RTN +0.0 <var>
>   
>   ✗ FSub RTN +0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FSub RTN +0.0 +0.0
>   
>   ✗ FSub RTN +0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FSub RTN +0.0 -0.0
>   
>   ✗ FSub RTN +0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FSub RTN +0.0 NaN
>   
>   ✗ FSub RTN -0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatSub RTN -0 c at 1146:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1146:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FSub RTN -0.0 <var>
>   
>   ✗ FSub RTN -0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FSub RTN -0.0 +0.0
>   
>   ✗ FSub RTN -0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FSub RTN -0.0 -0.0
>   
>   ✗ FSub RTN -0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FSub RTN -0.0 NaN
>   
>   ✗ FSub RTN NaN <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatSub RTN NaN c at 1148:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1148:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FSub RTN NaN <var>
>   
>   ✗ FSub RTN NaN +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FSub RTN NaN +0.0
>   
>   ✗ FSub RTN NaN -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FSub RTN NaN -0.0
>   
>   ✗ FSub RTN NaN NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FSub RTN NaN NaN
>   
>   ✗ FMul RTN <var> <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 2 shrinks.
>     shrink path: 1:a2
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatMul RTN c at 1150:f c at 1151:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1150:f |-> 0 0x0
>         ┃           │ c at 1151:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a2" FMul RTN <var> <var>
>   
>   ✗ FMul RTN <var> +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatMul RTN c at 1153:f 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1153:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMul RTN <var> +0.0
>   
>   ✗ FMul RTN <var> -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatMul RTN c at 1155:f -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1155:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMul RTN <var> -0.0
>   
>   ✗ FMul RTN <var> NaN failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatMul RTN c at 1157:f NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1157:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMul RTN <var> NaN
>   
>   ✗ FMul RTN +0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatMul RTN 0 c at 1159:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1159:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMul RTN +0.0 <var>
>   
>   ✗ FMul RTN +0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMul RTN +0.0 +0.0
>   
>   ✗ FMul RTN +0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMul RTN +0.0 -0.0
>   
>   ✗ FMul RTN +0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMul RTN +0.0 NaN
>   
>   ✗ FMul RTN -0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatMul RTN -0 c at 1161:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1161:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMul RTN -0.0 <var>
>   
>   ✗ FMul RTN -0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMul RTN -0.0 +0.0
>   
>   ✗ FMul RTN -0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMul RTN -0.0 -0.0
>   
>   ✗ FMul RTN -0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMul RTN -0.0 NaN
>   
>   ✗ FMul RTN NaN <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatMul RTN NaN c at 1163:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1163:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMul RTN NaN <var>
>   
>   ✗ FMul RTN NaN +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMul RTN NaN +0.0
>   
>   ✗ FMul RTN NaN -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMul RTN NaN -0.0
>   
>   ✗ FMul RTN NaN NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMul RTN NaN NaN
>   
>   ✗ FDiv RTN <var> <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 2 shrinks.
>     shrink path: 1:a2
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatDiv RTN c at 1165:f c at 1166:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1165:f |-> 0 0x0
>         ┃           │ c at 1166:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a2" FDiv RTN <var> <var>
>   
>   ✗ FDiv RTN <var> +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatDiv RTN c at 1168:f 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1168:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FDiv RTN <var> +0.0
>   
>   ✗ FDiv RTN <var> -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatDiv RTN c at 1170:f -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1170:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FDiv RTN <var> -0.0
>   
>   ✗ FDiv RTN <var> NaN failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatDiv RTN c at 1172:f NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1172:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FDiv RTN <var> NaN
>   
>   ✗ FDiv RTN +0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatDiv RTN 0 c at 1174:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1174:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FDiv RTN +0.0 <var>
>   
>   ✗ FDiv RTN +0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FDiv RTN +0.0 +0.0
>   
>   ✗ FDiv RTN +0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FDiv RTN +0.0 -0.0
>   
>   ✗ FDiv RTN +0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FDiv RTN +0.0 NaN
>   
>   ✗ FDiv RTN -0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatDiv RTN -0 c at 1176:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1176:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FDiv RTN -0.0 <var>
>   
>   ✗ FDiv RTN -0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FDiv RTN -0.0 +0.0
>   
>   ✗ FDiv RTN -0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FDiv RTN -0.0 -0.0
>   
>   ✗ FDiv RTN -0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FDiv RTN -0.0 NaN
>   
>   ✗ FDiv RTN NaN <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatDiv RTN NaN c at 1178:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1178:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FDiv RTN NaN <var>
>   
>   ✗ FDiv RTN NaN +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FDiv RTN NaN +0.0
>   
>   ✗ FDiv RTN NaN -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FDiv RTN NaN -0.0
>   
>   ✗ FDiv RTN NaN NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FDiv RTN NaN NaN
>   
>   ✗ FRem <var> <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 2 shrinks.
>     shrink path: 1:a2
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatRem c at 1180:f c at 1181:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1180:f |-> 0 0x0
>         ┃           │ c at 1181:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a2" FRem <var> <var>
>   
>   ✗ FRem <var> +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatRem c at 1183:f 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1183:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FRem <var> +0.0
>   
>   ✗ FRem <var> -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatRem c at 1185:f -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1185:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FRem <var> -0.0
>   
>   ✗ FRem <var> NaN failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatRem c at 1187:f NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1187:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FRem <var> NaN
>   
>   ✗ FRem +0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatRem 0 c at 1189:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1189:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FRem +0.0 <var>
>   
>   ✗ FRem +0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FRem +0.0 +0.0
>   
>   ✗ FRem +0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FRem +0.0 -0.0
>   
>   ✗ FRem +0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FRem +0.0 NaN
>   
>   ✗ FRem -0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatRem -0 c at 1191:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1191:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FRem -0.0 <var>
>   
>   ✗ FRem -0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FRem -0.0 +0.0
>   
>   ✗ FRem -0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FRem -0.0 -0.0
>   
>   ✗ FRem -0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FRem -0.0 NaN
>   
>   ✗ FRem NaN <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatRem NaN c at 1193:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1193:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FRem NaN <var>
>   
>   ✗ FRem NaN +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FRem NaN +0.0
>   
>   ✗ FRem NaN -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FRem NaN -0.0
>   
>   ✗ FRem NaN NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FRem NaN NaN
>   
>   ✗ FMin <var> <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 2 shrinks.
>     shrink path: 1:a2
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ let -- :1:0
>         ┃        │     v1204 = ite (eq c at 1195:f c at 1196:f) c at 1195:f (ite c at 1202:b c at 1195:f c at 1196:f)
>         ┃        │     -- :1:0
>         ┃        │     v1205 = ite (floatLt c at 1196:f c at 1195:f) c at 1196:f v1204
>         ┃        │     -- :1:0
>         ┃        │     v1206 = ite (floatLt c at 1195:f c at 1196:f) c at 1195:f v1205
>         ┃        │     -- :1:0
>         ┃        │     v1207 = ite (floatIsNaN c at 1196:f) c at 1195:f v1206
>         ┃        │  in ite (floatIsNaN c at 1195:f) c at 1196:f v1207
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1195:f |-> 0 0x0
>         ┃           │ c at 1196:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a2" FMin <var> <var>
>   
>   ✗ FMin <var> +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ let -- :1:0
>         ┃        │     v1216 = ite (eq c at 1209:f 0) c at 1209:f (ite c at 1214:b c at 1209:f 0)
>         ┃        │     -- :1:0
>         ┃        │     v1217 = ite (floatLt 0 c at 1209:f) 0 v1216
>         ┃        │     -- :1:0
>         ┃        │     v1218 = ite (floatLt c at 1209:f 0) c at 1209:f v1217
>         ┃        │  in ite (floatIsNaN c at 1209:f) 0 v1218
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1209:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMin <var> +0.0
>   
>   ✗ FMin <var> -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:b
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ let -- :1:0
>         ┃        │     v1227 = ite (eq c at 1220:f -0) c at 1220:f (ite c at 1225:b c at 1220:f -0)
>         ┃        │     -- :1:0
>         ┃        │     v1228 = ite (floatLt -0 c at 1220:f) -0 v1227
>         ┃        │     -- :1:0
>         ┃        │     v1229 = ite (floatLt c at 1220:f -0) c at 1220:f v1228
>         ┃        │  in ite (floatIsNaN c at 1220:f) -0 v1229
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1220:f |-> -0 0x80000000
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:b" FMin <var> -0.0
>   
>   ✗ FMin <var> NaN failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ ite (floatIsNaN c at 1231:f) NaN c at 1231:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1231:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMin <var> NaN
>   
>   ✗ FMin +0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ let -- :1:0
>         ┃        │     v1241 = ite (eq 0 c at 1234:f) 0 (ite c at 1239:b 0 c at 1234:f)
>         ┃        │     -- :1:0
>         ┃        │     v1242 = ite (floatLt c at 1234:f 0) c at 1234:f v1241
>         ┃        │  in ite (floatIsNaN c at 1234:f) 0 (ite (floatLt 0 c at 1234:f) 0 v1242)
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1234:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMin +0.0 <var>
>   
>   ✗ FMin +0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMin +0.0 +0.0
>   
>   ✓ FMin +0.0 -0.0 passed 1 test.
>   ✗ FMin +0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMin +0.0 NaN
>   
>   ✗ FMin -0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 2 tests and 1 shrink.
>     shrink path: 2:b
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ let -- :1:0
>         ┃        │     v1254 = ite (eq -0 c at 1247:f) -0 (ite c at 1252:b -0 c at 1247:f)
>         ┃        │     -- :1:0
>         ┃        │     v1255 = ite (floatLt c at 1247:f -0) c at 1247:f v1254
>         ┃        │  in ite (floatIsNaN c at 1247:f) -0 (ite (floatLt -0 c at 1247:f) -0 v1255)
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1247:f |-> -0 0x80000000
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "2:b" FMin -0.0 <var>
>   
>   ✓ FMin -0.0 +0.0 passed 1 test.
>   ✗ FMin -0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMin -0.0 -0.0
>   
>   ✗ FMin -0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMin -0.0 NaN
>   
>   ✗ FMin NaN <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ c at 1260:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1260:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMin NaN <var>
>   
>   ✗ FMin NaN +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMin NaN +0.0
>   
>   ✗ FMin NaN -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMin NaN -0.0
>   
>   ✗ FMin NaN NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMin NaN NaN
>   
>   ✗ FMax <var> <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 2 shrinks.
>     shrink path: 1:a2
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ let -- :1:0
>         ┃        │     v1270 = ite (eq c at 1261:f c at 1262:f) c at 1261:f (ite c at 1268:b c at 1261:f c at 1262:f)
>         ┃        │     -- :1:0
>         ┃        │     v1271 = ite (floatLt c at 1262:f c at 1261:f) c at 1261:f v1270
>         ┃        │     -- :1:0
>         ┃        │     v1272 = ite (floatLt c at 1261:f c at 1262:f) c at 1262:f v1271
>         ┃        │     -- :1:0
>         ┃        │     v1273 = ite (floatIsNaN c at 1262:f) c at 1261:f v1272
>         ┃        │  in ite (floatIsNaN c at 1261:f) c at 1262:f v1273
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1261:f |-> 0 0x0
>         ┃           │ c at 1262:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a2" FMax <var> <var>
>   
>   ✗ FMax <var> +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ let -- :1:0
>         ┃        │     v1282 = ite (eq c at 1275:f 0) c at 1275:f (ite c at 1280:b c at 1275:f 0)
>         ┃        │     -- :1:0
>         ┃        │     v1283 = ite (floatLt 0 c at 1275:f) c at 1275:f v1282
>         ┃        │  in ite (floatIsNaN c at 1275:f) 0 (ite (floatLt c at 1275:f 0) 0 v1283)
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1275:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMax <var> +0.0
>   
>   ✗ FMax <var> -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:b
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ let -- :1:0
>         ┃        │     v1293 = ite (eq c at 1286:f -0) c at 1286:f (ite c at 1291:b c at 1286:f -0)
>         ┃        │     -- :1:0
>         ┃        │     v1294 = ite (floatLt -0 c at 1286:f) c at 1286:f v1293
>         ┃        │  in ite (floatIsNaN c at 1286:f) -0 (ite (floatLt c at 1286:f -0) -0 v1294)
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1286:f |-> -0 0x80000000
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:b" FMax <var> -0.0
>   
>   ✗ FMax <var> NaN failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ ite (floatIsNaN c at 1297:f) NaN c at 1297:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1297:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMax <var> NaN
>   
>   ✗ FMax +0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ let -- :1:0
>         ┃        │     v1307 = ite (eq 0 c at 1300:f) 0 (ite c at 1305:b 0 c at 1300:f)
>         ┃        │     -- :1:0
>         ┃        │     v1308 = ite (floatLt c at 1300:f 0) 0 v1307
>         ┃        │     -- :1:0
>         ┃        │     v1309 = ite (floatLt 0 c at 1300:f) c at 1300:f v1308
>         ┃        │  in ite (floatIsNaN c at 1300:f) 0 v1309
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1300:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMax +0.0 <var>
>   
>   ✗ FMax +0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMax +0.0 +0.0
>   
>   ✓ FMax +0.0 -0.0 passed 1 test.
>   ✗ FMax +0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMax +0.0 NaN
>   
>   ✗ FMax -0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 2 tests and 1 shrink.
>     shrink path: 2:b
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ let -- :1:0
>         ┃        │     v1320 = ite (eq -0 c at 1313:f) -0 (ite c at 1318:b -0 c at 1313:f)
>         ┃        │     -- :1:0
>         ┃        │     v1321 = ite (floatLt c at 1313:f -0) -0 v1320
>         ┃        │     -- :1:0
>         ┃        │     v1322 = ite (floatLt -0 c at 1313:f) c at 1313:f v1321
>         ┃        │  in ite (floatIsNaN c at 1313:f) -0 v1322
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1313:f |-> -0 0x80000000
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "2:b" FMax -0.0 <var>
>   
>   ✓ FMax -0.0 +0.0 passed 1 test.
>   ✗ FMax -0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMax -0.0 -0.0
>   
>   ✗ FMax -0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMax -0.0 NaN
>   
>   ✗ FMax NaN <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ c at 1326:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1326:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMax NaN <var>
>   
>   ✗ FMax NaN +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMax NaN +0.0
>   
>   ✗ FMax NaN -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMax NaN -0.0
>   
>   ✗ FMax NaN NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMax NaN NaN
>   
>   ✗ FMA RTN <var> <var> <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 3 shrinks.
>     shrink path: 1:a3
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RTN c at 1327:f c at 1328:f c at 1329:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1327:f |-> 0 0x0
>         ┃           │ c at 1328:f |-> 0 0x0
>         ┃           │ c at 1329:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a3" FMA RTN <var> <var> <var>
>   
>   ✗ FMA RTN <var> <var> +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 2 shrinks.
>     shrink path: 1:a2
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RTN c at 1331:f c at 1332:f 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1331:f |-> 0 0x0
>         ┃           │ c at 1332:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a2" FMA RTN <var> <var> +0.0
>   
>   ✗ FMA RTN <var> <var> -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 2 shrinks.
>     shrink path: 1:a2
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RTN c at 1334:f c at 1335:f -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1334:f |-> 0 0x0
>         ┃           │ c at 1335:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a2" FMA RTN <var> <var> -0.0
>   
>   ✗ FMA RTN <var> <var> NaN failed at test/TestTemplate.hs:656:66
>     after 1 test and 2 shrinks.
>     shrink path: 1:a2
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RTN c at 1337:f c at 1338:f NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1337:f |-> 0 0x0
>         ┃           │ c at 1338:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a2" FMA RTN <var> <var> NaN
>   
>   ✗ FMA RTN <var> +0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 2 shrinks.
>     shrink path: 1:a2
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RTN c at 1340:f 0 c at 1341:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1340:f |-> 0 0x0
>         ┃           │ c at 1341:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a2" FMA RTN <var> +0.0 <var>
>   
>   ✗ FMA RTN <var> +0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RTN c at 1343:f 0 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1343:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RTN <var> +0.0 +0.0
>   
>   ✗ FMA RTN <var> +0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RTN c at 1345:f 0 -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1345:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RTN <var> +0.0 -0.0
>   
>   ✗ FMA RTN <var> +0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RTN c at 1347:f 0 NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1347:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RTN <var> +0.0 NaN
>   
>   ✗ FMA RTN <var> -0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 2 shrinks.
>     shrink path: 1:a2
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RTN c at 1349:f -0 c at 1350:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1349:f |-> 0 0x0
>         ┃           │ c at 1350:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a2" FMA RTN <var> -0.0 <var>
>   
>   ✗ FMA RTN <var> -0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RTN c at 1352:f -0 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1352:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RTN <var> -0.0 +0.0
>   
>   ✗ FMA RTN <var> -0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RTN c at 1354:f -0 -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1354:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RTN <var> -0.0 -0.0
>   
>   ✗ FMA RTN <var> -0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RTN c at 1356:f -0 NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1356:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RTN <var> -0.0 NaN
>   
>   ✗ FMA RTN <var> NaN <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 2 shrinks.
>     shrink path: 1:a2
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RTN c at 1358:f NaN c at 1359:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1358:f |-> 0 0x0
>         ┃           │ c at 1359:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a2" FMA RTN <var> NaN <var>
>   
>   ✗ FMA RTN <var> NaN +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RTN c at 1361:f NaN 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1361:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RTN <var> NaN +0.0
>   
>   ✗ FMA RTN <var> NaN -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RTN c at 1363:f NaN -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1363:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RTN <var> NaN -0.0
>   
>   ✗ FMA RTN <var> NaN NaN failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RTN c at 1365:f NaN NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1365:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RTN <var> NaN NaN
>   
>   ✗ FMA RTN +0.0 <var> <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 2 shrinks.
>     shrink path: 1:a2
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RTN 0 c at 1367:f c at 1368:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1367:f |-> 0 0x0
>         ┃           │ c at 1368:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a2" FMA RTN +0.0 <var> <var>
>   
>   ✗ FMA RTN +0.0 <var> +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RTN 0 c at 1370:f 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1370:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RTN +0.0 <var> +0.0
>   
>   ✗ FMA RTN +0.0 <var> -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RTN 0 c at 1372:f -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1372:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RTN +0.0 <var> -0.0
>   
>   ✗ FMA RTN +0.0 <var> NaN failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RTN 0 c at 1374:f NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1374:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RTN +0.0 <var> NaN
>   
>   ✗ FMA RTN +0.0 +0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RTN 0 0 c at 1376:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1376:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RTN +0.0 +0.0 <var>
>   
>   ✗ FMA RTN +0.0 +0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RTN +0.0 +0.0 +0.0
>   
>   ✗ FMA RTN +0.0 +0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RTN +0.0 +0.0 -0.0
>   
>   ✗ FMA RTN +0.0 +0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RTN +0.0 +0.0 NaN
>   
>   ✗ FMA RTN +0.0 -0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RTN 0 -0 c at 1378:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1378:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RTN +0.0 -0.0 <var>
>   
>   ✗ FMA RTN +0.0 -0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RTN +0.0 -0.0 +0.0
>   
>   ✗ FMA RTN +0.0 -0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RTN +0.0 -0.0 -0.0
>   
>   ✗ FMA RTN +0.0 -0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RTN +0.0 -0.0 NaN
>   
>   ✗ FMA RTN +0.0 NaN <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RTN 0 NaN c at 1380:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1380:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RTN +0.0 NaN <var>
>   
>   ✗ FMA RTN +0.0 NaN +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RTN +0.0 NaN +0.0
>   
>   ✗ FMA RTN +0.0 NaN -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RTN +0.0 NaN -0.0
>   
>   ✗ FMA RTN +0.0 NaN NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RTN +0.0 NaN NaN
>   
>   ✗ FMA RTN -0.0 <var> <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 2 shrinks.
>     shrink path: 1:a2
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RTN -0 c at 1382:f c at 1383:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1382:f |-> 0 0x0
>         ┃           │ c at 1383:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a2" FMA RTN -0.0 <var> <var>
>   
>   ✗ FMA RTN -0.0 <var> +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RTN -0 c at 1385:f 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1385:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RTN -0.0 <var> +0.0
>   
>   ✗ FMA RTN -0.0 <var> -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RTN -0 c at 1387:f -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1387:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RTN -0.0 <var> -0.0
>   
>   ✗ FMA RTN -0.0 <var> NaN failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RTN -0 c at 1389:f NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1389:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RTN -0.0 <var> NaN
>   
>   ✗ FMA RTN -0.0 +0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RTN -0 0 c at 1391:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1391:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RTN -0.0 +0.0 <var>
>   
>   ✗ FMA RTN -0.0 +0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RTN -0.0 +0.0 +0.0
>   
>   ✗ FMA RTN -0.0 +0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RTN -0.0 +0.0 -0.0
>   
>   ✗ FMA RTN -0.0 +0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RTN -0.0 +0.0 NaN
>   
>   ✗ FMA RTN -0.0 -0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RTN -0 -0 c at 1393:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1393:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RTN -0.0 -0.0 <var>
>   
>   ✗ FMA RTN -0.0 -0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RTN -0.0 -0.0 +0.0
>   
>   ✗ FMA RTN -0.0 -0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RTN -0.0 -0.0 -0.0
>   
>   ✗ FMA RTN -0.0 -0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RTN -0.0 -0.0 NaN
>   
>   ✗ FMA RTN -0.0 NaN <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RTN -0 NaN c at 1395:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1395:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RTN -0.0 NaN <var>
>   
>   ✗ FMA RTN -0.0 NaN +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RTN -0.0 NaN +0.0
>   
>   ✗ FMA RTN -0.0 NaN -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RTN -0.0 NaN -0.0
>   
>   ✗ FMA RTN -0.0 NaN NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RTN -0.0 NaN NaN
>   
>   ✗ FMA RTN NaN <var> <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 2 shrinks.
>     shrink path: 1:a2
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RTN NaN c at 1397:f c at 1398:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1397:f |-> 0 0x0
>         ┃           │ c at 1398:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a2" FMA RTN NaN <var> <var>
>   
>   ✗ FMA RTN NaN <var> +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RTN NaN c at 1400:f 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1400:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RTN NaN <var> +0.0
>   
>   ✗ FMA RTN NaN <var> -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RTN NaN c at 1402:f -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1402:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RTN NaN <var> -0.0
>   
>   ✗ FMA RTN NaN <var> NaN failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RTN NaN c at 1404:f NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1404:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RTN NaN <var> NaN
>   
>   ✗ FMA RTN NaN +0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RTN NaN 0 c at 1406:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1406:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RTN NaN +0.0 <var>
>   
>   ✗ FMA RTN NaN +0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RTN NaN +0.0 +0.0
>   
>   ✗ FMA RTN NaN +0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RTN NaN +0.0 -0.0
>   
>   ✗ FMA RTN NaN +0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RTN NaN +0.0 NaN
>   
>   ✗ FMA RTN NaN -0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RTN NaN -0 c at 1408:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1408:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RTN NaN -0.0 <var>
>   
>   ✗ FMA RTN NaN -0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RTN NaN -0.0 +0.0
>   
>   ✗ FMA RTN NaN -0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RTN NaN -0.0 -0.0
>   
>   ✗ FMA RTN NaN -0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RTN NaN -0.0 NaN
>   
>   ✗ FMA RTN NaN NaN <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RTN NaN NaN c at 1410:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1410:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RTN NaN NaN <var>
>   
>   ✗ FMA RTN NaN NaN +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RTN NaN NaN +0.0
>   
>   ✗ FMA RTN NaN NaN -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RTN NaN NaN -0.0
>   
>   ✗ FMA RTN NaN NaN NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RTN NaN NaN NaN
>   
>   ✗ <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ c at 1412:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1412:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" <var>
>   
>   ✗ +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" +0.0
>   
>   ✗ -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" -0.0
>   
>   ✗ NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" NaN
>   
>   ✗ FloatFromBits <var> failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFromBinary c at 1413:bv
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1413:bv |-> 0x0:[32]
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FloatFromBits <var>
>   
>   ✗ FNeg <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatNeg c at 1415:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1415:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FNeg <var>
>   
>   ✗ FNeg +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FNeg +0.0
>   
>   ✗ FNeg -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FNeg -0.0
>   
>   ✗ FNeg NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FNeg NaN
>   
>   ✗ FAbs <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatAbs c at 1417:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1417:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FAbs <var>
>   
>   ✗ FAbs +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FAbs +0.0
>   
>   ✗ FAbs -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FAbs -0.0
>   
>   ✗ FAbs NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FAbs NaN
>   
>   ✗ FSqrt RTZ <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatSqrt RTZ c at 1419:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1419:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FSqrt RTZ <var>
>   
>   ✗ FSqrt RTZ +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FSqrt RTZ +0.0
>   
>   ✗ FSqrt RTZ -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FSqrt RTZ -0.0
>   
>   ✗ FSqrt RTZ NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FSqrt RTZ NaN
>   
>   ✗ FRound RTZ <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatRound RTZ c at 1421:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1421:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FRound RTZ <var>
>   
>   ✗ FRound RTZ +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FRound RTZ +0.0
>   
>   ✗ FRound RTZ -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FRound RTZ -0.0
>   
>   ✗ FRound RTZ NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FRound RTZ NaN
>   
>   ✗ FAdd RTZ <var> <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 2 shrinks.
>     shrink path: 1:a2
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatAdd RTZ c at 1423:f c at 1424:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1423:f |-> 0 0x0
>         ┃           │ c at 1424:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a2" FAdd RTZ <var> <var>
>   
>   ✗ FAdd RTZ <var> +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatAdd RTZ c at 1426:f 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1426:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FAdd RTZ <var> +0.0
>   
>   ✗ FAdd RTZ <var> -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatAdd RTZ c at 1428:f -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1428:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FAdd RTZ <var> -0.0
>   
>   ✗ FAdd RTZ <var> NaN failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatAdd RTZ c at 1430:f NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1430:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FAdd RTZ <var> NaN
>   
>   ✗ FAdd RTZ +0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatAdd RTZ 0 c at 1432:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1432:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FAdd RTZ +0.0 <var>
>   
>   ✗ FAdd RTZ +0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FAdd RTZ +0.0 +0.0
>   
>   ✗ FAdd RTZ +0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FAdd RTZ +0.0 -0.0
>   
>   ✗ FAdd RTZ +0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FAdd RTZ +0.0 NaN
>   
>   ✗ FAdd RTZ -0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatAdd RTZ -0 c at 1434:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1434:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FAdd RTZ -0.0 <var>
>   
>   ✗ FAdd RTZ -0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FAdd RTZ -0.0 +0.0
>   
>   ✗ FAdd RTZ -0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FAdd RTZ -0.0 -0.0
>   
>   ✗ FAdd RTZ -0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FAdd RTZ -0.0 NaN
>   
>   ✗ FAdd RTZ NaN <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatAdd RTZ NaN c at 1436:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1436:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FAdd RTZ NaN <var>
>   
>   ✗ FAdd RTZ NaN +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FAdd RTZ NaN +0.0
>   
>   ✗ FAdd RTZ NaN -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FAdd RTZ NaN -0.0
>   
>   ✗ FAdd RTZ NaN NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FAdd RTZ NaN NaN
>   
>   ✗ FSub RTZ <var> <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 2 shrinks.
>     shrink path: 1:a2
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatSub RTZ c at 1438:f c at 1439:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1438:f |-> 0 0x0
>         ┃           │ c at 1439:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a2" FSub RTZ <var> <var>
>   
>   ✗ FSub RTZ <var> +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatSub RTZ c at 1441:f 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1441:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FSub RTZ <var> +0.0
>   
>   ✗ FSub RTZ <var> -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatSub RTZ c at 1443:f -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1443:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FSub RTZ <var> -0.0
>   
>   ✗ FSub RTZ <var> NaN failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatSub RTZ c at 1445:f NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1445:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FSub RTZ <var> NaN
>   
>   ✗ FSub RTZ +0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatSub RTZ 0 c at 1447:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1447:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FSub RTZ +0.0 <var>
>   
>   ✗ FSub RTZ +0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FSub RTZ +0.0 +0.0
>   
>   ✗ FSub RTZ +0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FSub RTZ +0.0 -0.0
>   
>   ✗ FSub RTZ +0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FSub RTZ +0.0 NaN
>   
>   ✗ FSub RTZ -0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatSub RTZ -0 c at 1449:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1449:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FSub RTZ -0.0 <var>
>   
>   ✗ FSub RTZ -0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FSub RTZ -0.0 +0.0
>   
>   ✗ FSub RTZ -0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FSub RTZ -0.0 -0.0
>   
>   ✗ FSub RTZ -0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FSub RTZ -0.0 NaN
>   
>   ✗ FSub RTZ NaN <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatSub RTZ NaN c at 1451:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1451:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FSub RTZ NaN <var>
>   
>   ✗ FSub RTZ NaN +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FSub RTZ NaN +0.0
>   
>   ✗ FSub RTZ NaN -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FSub RTZ NaN -0.0
>   
>   ✗ FSub RTZ NaN NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FSub RTZ NaN NaN
>   
>   ✗ FMul RTZ <var> <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 2 shrinks.
>     shrink path: 1:a2
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatMul RTZ c at 1453:f c at 1454:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1453:f |-> 0 0x0
>         ┃           │ c at 1454:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a2" FMul RTZ <var> <var>
>   
>   ✗ FMul RTZ <var> +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatMul RTZ c at 1456:f 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1456:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMul RTZ <var> +0.0
>   
>   ✗ FMul RTZ <var> -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatMul RTZ c at 1458:f -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1458:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMul RTZ <var> -0.0
>   
>   ✗ FMul RTZ <var> NaN failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatMul RTZ c at 1460:f NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1460:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMul RTZ <var> NaN
>   
>   ✗ FMul RTZ +0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatMul RTZ 0 c at 1462:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1462:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMul RTZ +0.0 <var>
>   
>   ✗ FMul RTZ +0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMul RTZ +0.0 +0.0
>   
>   ✗ FMul RTZ +0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMul RTZ +0.0 -0.0
>   
>   ✗ FMul RTZ +0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMul RTZ +0.0 NaN
>   
>   ✗ FMul RTZ -0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatMul RTZ -0 c at 1464:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1464:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMul RTZ -0.0 <var>
>   
>   ✗ FMul RTZ -0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMul RTZ -0.0 +0.0
>   
>   ✗ FMul RTZ -0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMul RTZ -0.0 -0.0
>   
>   ✗ FMul RTZ -0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMul RTZ -0.0 NaN
>   
>   ✗ FMul RTZ NaN <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatMul RTZ NaN c at 1466:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1466:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMul RTZ NaN <var>
>   
>   ✗ FMul RTZ NaN +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMul RTZ NaN +0.0
>   
>   ✗ FMul RTZ NaN -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMul RTZ NaN -0.0
>   
>   ✗ FMul RTZ NaN NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMul RTZ NaN NaN
>   
>   ✗ FDiv RTZ <var> <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 2 shrinks.
>     shrink path: 1:a2
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatDiv RTZ c at 1468:f c at 1469:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1468:f |-> 0 0x0
>         ┃           │ c at 1469:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a2" FDiv RTZ <var> <var>
>   
>   ✗ FDiv RTZ <var> +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatDiv RTZ c at 1471:f 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1471:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FDiv RTZ <var> +0.0
>   
>   ✗ FDiv RTZ <var> -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatDiv RTZ c at 1473:f -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1473:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FDiv RTZ <var> -0.0
>   
>   ✗ FDiv RTZ <var> NaN failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatDiv RTZ c at 1475:f NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1475:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FDiv RTZ <var> NaN
>   
>   ✗ FDiv RTZ +0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatDiv RTZ 0 c at 1477:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1477:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FDiv RTZ +0.0 <var>
>   
>   ✗ FDiv RTZ +0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FDiv RTZ +0.0 +0.0
>   
>   ✗ FDiv RTZ +0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FDiv RTZ +0.0 -0.0
>   
>   ✗ FDiv RTZ +0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FDiv RTZ +0.0 NaN
>   
>   ✗ FDiv RTZ -0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatDiv RTZ -0 c at 1479:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1479:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FDiv RTZ -0.0 <var>
>   
>   ✗ FDiv RTZ -0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FDiv RTZ -0.0 +0.0
>   
>   ✗ FDiv RTZ -0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FDiv RTZ -0.0 -0.0
>   
>   ✗ FDiv RTZ -0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FDiv RTZ -0.0 NaN
>   
>   ✗ FDiv RTZ NaN <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatDiv RTZ NaN c at 1481:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1481:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FDiv RTZ NaN <var>
>   
>   ✗ FDiv RTZ NaN +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FDiv RTZ NaN +0.0
>   
>   ✗ FDiv RTZ NaN -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FDiv RTZ NaN -0.0
>   
>   ✗ FDiv RTZ NaN NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FDiv RTZ NaN NaN
>   
>   ✗ FRem <var> <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 2 shrinks.
>     shrink path: 1:a2
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatRem c at 1483:f c at 1484:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1483:f |-> 0 0x0
>         ┃           │ c at 1484:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a2" FRem <var> <var>
>   
>   ✗ FRem <var> +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatRem c at 1486:f 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1486:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FRem <var> +0.0
>   
>   ✗ FRem <var> -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatRem c at 1488:f -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1488:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FRem <var> -0.0
>   
>   ✗ FRem <var> NaN failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatRem c at 1490:f NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1490:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FRem <var> NaN
>   
>   ✗ FRem +0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatRem 0 c at 1492:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1492:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FRem +0.0 <var>
>   
>   ✗ FRem +0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FRem +0.0 +0.0
>   
>   ✗ FRem +0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FRem +0.0 -0.0
>   
>   ✗ FRem +0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FRem +0.0 NaN
>   
>   ✗ FRem -0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatRem -0 c at 1494:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1494:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FRem -0.0 <var>
>   
>   ✗ FRem -0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FRem -0.0 +0.0
>   
>   ✗ FRem -0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FRem -0.0 -0.0
>   
>   ✗ FRem -0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FRem -0.0 NaN
>   
>   ✗ FRem NaN <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatRem NaN c at 1496:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1496:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FRem NaN <var>
>   
>   ✗ FRem NaN +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FRem NaN +0.0
>   
>   ✗ FRem NaN -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FRem NaN -0.0
>   
>   ✗ FRem NaN NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FRem NaN NaN
>   
>   ✗ FMin <var> <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 2 shrinks.
>     shrink path: 1:a2
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ let -- :1:0
>         ┃        │     v1507 = ite (eq c at 1498:f c at 1499:f) c at 1498:f (ite c at 1505:b c at 1498:f c at 1499:f)
>         ┃        │     -- :1:0
>         ┃        │     v1508 = ite (floatLt c at 1499:f c at 1498:f) c at 1499:f v1507
>         ┃        │     -- :1:0
>         ┃        │     v1509 = ite (floatLt c at 1498:f c at 1499:f) c at 1498:f v1508
>         ┃        │     -- :1:0
>         ┃        │     v1510 = ite (floatIsNaN c at 1499:f) c at 1498:f v1509
>         ┃        │  in ite (floatIsNaN c at 1498:f) c at 1499:f v1510
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1498:f |-> 0 0x0
>         ┃           │ c at 1499:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a2" FMin <var> <var>
>   
>   ✗ FMin <var> +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ let -- :1:0
>         ┃        │     v1519 = ite (eq c at 1512:f 0) c at 1512:f (ite c at 1517:b c at 1512:f 0)
>         ┃        │     -- :1:0
>         ┃        │     v1520 = ite (floatLt 0 c at 1512:f) 0 v1519
>         ┃        │     -- :1:0
>         ┃        │     v1521 = ite (floatLt c at 1512:f 0) c at 1512:f v1520
>         ┃        │  in ite (floatIsNaN c at 1512:f) 0 v1521
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1512:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMin <var> +0.0
>   
>   ✗ FMin <var> -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:b
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ let -- :1:0
>         ┃        │     v1530 = ite (eq c at 1523:f -0) c at 1523:f (ite c at 1528:b c at 1523:f -0)
>         ┃        │     -- :1:0
>         ┃        │     v1531 = ite (floatLt -0 c at 1523:f) -0 v1530
>         ┃        │     -- :1:0
>         ┃        │     v1532 = ite (floatLt c at 1523:f -0) c at 1523:f v1531
>         ┃        │  in ite (floatIsNaN c at 1523:f) -0 v1532
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1523:f |-> -0 0x80000000
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:b" FMin <var> -0.0
>   
>   ✗ FMin <var> NaN failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ ite (floatIsNaN c at 1534:f) NaN c at 1534:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1534:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMin <var> NaN
>   
>   ✗ FMin +0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ let -- :1:0
>         ┃        │     v1544 = ite (eq 0 c at 1537:f) 0 (ite c at 1542:b 0 c at 1537:f)
>         ┃        │     -- :1:0
>         ┃        │     v1545 = ite (floatLt c at 1537:f 0) c at 1537:f v1544
>         ┃        │  in ite (floatIsNaN c at 1537:f) 0 (ite (floatLt 0 c at 1537:f) 0 v1545)
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1537:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMin +0.0 <var>
>   
>   ✗ FMin +0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMin +0.0 +0.0
>   
>   ✓ FMin +0.0 -0.0 passed 1 test.
>   ✗ FMin +0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMin +0.0 NaN
>   
>   ✗ FMin -0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 2 tests and 1 shrink.
>     shrink path: 2:b
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ let -- :1:0
>         ┃        │     v1557 = ite (eq -0 c at 1550:f) -0 (ite c at 1555:b -0 c at 1550:f)
>         ┃        │     -- :1:0
>         ┃        │     v1558 = ite (floatLt c at 1550:f -0) c at 1550:f v1557
>         ┃        │  in ite (floatIsNaN c at 1550:f) -0 (ite (floatLt -0 c at 1550:f) -0 v1558)
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1550:f |-> -0 0x80000000
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "2:b" FMin -0.0 <var>
>   
>   ✓ FMin -0.0 +0.0 passed 1 test.
>   ✗ FMin -0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMin -0.0 -0.0
>   
>   ✗ FMin -0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMin -0.0 NaN
>   
>   ✗ FMin NaN <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ c at 1563:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1563:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMin NaN <var>
>   
>   ✗ FMin NaN +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMin NaN +0.0
>   
>   ✗ FMin NaN -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMin NaN -0.0
>   
>   ✗ FMin NaN NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMin NaN NaN
>   
>   ✗ FMax <var> <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 2 shrinks.
>     shrink path: 1:a2
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ let -- :1:0
>         ┃        │     v1573 = ite (eq c at 1564:f c at 1565:f) c at 1564:f (ite c at 1571:b c at 1564:f c at 1565:f)
>         ┃        │     -- :1:0
>         ┃        │     v1574 = ite (floatLt c at 1565:f c at 1564:f) c at 1564:f v1573
>         ┃        │     -- :1:0
>         ┃        │     v1575 = ite (floatLt c at 1564:f c at 1565:f) c at 1565:f v1574
>         ┃        │     -- :1:0
>         ┃        │     v1576 = ite (floatIsNaN c at 1565:f) c at 1564:f v1575
>         ┃        │  in ite (floatIsNaN c at 1564:f) c at 1565:f v1576
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1564:f |-> 0 0x0
>         ┃           │ c at 1565:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a2" FMax <var> <var>
>   
>   ✗ FMax <var> +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ let -- :1:0
>         ┃        │     v1585 = ite (eq c at 1578:f 0) c at 1578:f (ite c at 1583:b c at 1578:f 0)
>         ┃        │     -- :1:0
>         ┃        │     v1586 = ite (floatLt 0 c at 1578:f) c at 1578:f v1585
>         ┃        │  in ite (floatIsNaN c at 1578:f) 0 (ite (floatLt c at 1578:f 0) 0 v1586)
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1578:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMax <var> +0.0
>   
>   ✗ FMax <var> -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:b
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ let -- :1:0
>         ┃        │     v1596 = ite (eq c at 1589:f -0) c at 1589:f (ite c at 1594:b c at 1589:f -0)
>         ┃        │     -- :1:0
>         ┃        │     v1597 = ite (floatLt -0 c at 1589:f) c at 1589:f v1596
>         ┃        │  in ite (floatIsNaN c at 1589:f) -0 (ite (floatLt c at 1589:f -0) -0 v1597)
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1589:f |-> -0 0x80000000
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:b" FMax <var> -0.0
>   
>   ✗ FMax <var> NaN failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ ite (floatIsNaN c at 1600:f) NaN c at 1600:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1600:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMax <var> NaN
>   
>   ✗ FMax +0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ let -- :1:0
>         ┃        │     v1610 = ite (eq 0 c at 1603:f) 0 (ite c at 1608:b 0 c at 1603:f)
>         ┃        │     -- :1:0
>         ┃        │     v1611 = ite (floatLt c at 1603:f 0) 0 v1610
>         ┃        │     -- :1:0
>         ┃        │     v1612 = ite (floatLt 0 c at 1603:f) c at 1603:f v1611
>         ┃        │  in ite (floatIsNaN c at 1603:f) 0 v1612
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1603:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMax +0.0 <var>
>   
>   ✗ FMax +0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMax +0.0 +0.0
>   
>   ✓ FMax +0.0 -0.0 passed 1 test.
>   ✗ FMax +0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMax +0.0 NaN
>   
>   ✗ FMax -0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 2 tests and 1 shrink.
>     shrink path: 2:b
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ let -- :1:0
>         ┃        │     v1623 = ite (eq -0 c at 1616:f) -0 (ite c at 1621:b -0 c at 1616:f)
>         ┃        │     -- :1:0
>         ┃        │     v1624 = ite (floatLt c at 1616:f -0) -0 v1623
>         ┃        │     -- :1:0
>         ┃        │     v1625 = ite (floatLt -0 c at 1616:f) c at 1616:f v1624
>         ┃        │  in ite (floatIsNaN c at 1616:f) -0 v1625
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1616:f |-> -0 0x80000000
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "2:b" FMax -0.0 <var>
>   
>   ✓ FMax -0.0 +0.0 passed 1 test.
>   ✗ FMax -0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMax -0.0 -0.0
>   
>   ✗ FMax -0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMax -0.0 NaN
>   
>   ✗ FMax NaN <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ c at 1629:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1629:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMax NaN <var>
>   
>   ✗ FMax NaN +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMax NaN +0.0
>   
>   ✗ FMax NaN -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMax NaN -0.0
>   
>   ✗ FMax NaN NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMax NaN NaN
>   
>   ✗ FMA RTZ <var> <var> <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 3 shrinks.
>     shrink path: 1:a3
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RTZ c at 1630:f c at 1631:f c at 1632:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1630:f |-> 0 0x0
>         ┃           │ c at 1631:f |-> 0 0x0
>         ┃           │ c at 1632:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a3" FMA RTZ <var> <var> <var>
>   
>   ✗ FMA RTZ <var> <var> +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 2 shrinks.
>     shrink path: 1:a2
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RTZ c at 1634:f c at 1635:f 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1634:f |-> 0 0x0
>         ┃           │ c at 1635:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a2" FMA RTZ <var> <var> +0.0
>   
>   ✗ FMA RTZ <var> <var> -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 2 shrinks.
>     shrink path: 1:a2
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RTZ c at 1637:f c at 1638:f -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1637:f |-> 0 0x0
>         ┃           │ c at 1638:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a2" FMA RTZ <var> <var> -0.0
>   
>   ✗ FMA RTZ <var> <var> NaN failed at test/TestTemplate.hs:656:66
>     after 1 test and 2 shrinks.
>     shrink path: 1:a2
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RTZ c at 1640:f c at 1641:f NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1640:f |-> 0 0x0
>         ┃           │ c at 1641:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a2" FMA RTZ <var> <var> NaN
>   
>   ✗ FMA RTZ <var> +0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 2 shrinks.
>     shrink path: 1:a2
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RTZ c at 1643:f 0 c at 1644:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1643:f |-> 0 0x0
>         ┃           │ c at 1644:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a2" FMA RTZ <var> +0.0 <var>
>   
>   ✗ FMA RTZ <var> +0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RTZ c at 1646:f 0 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1646:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RTZ <var> +0.0 +0.0
>   
>   ✗ FMA RTZ <var> +0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RTZ c at 1648:f 0 -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1648:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RTZ <var> +0.0 -0.0
>   
>   ✗ FMA RTZ <var> +0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RTZ c at 1650:f 0 NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1650:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RTZ <var> +0.0 NaN
>   
>   ✗ FMA RTZ <var> -0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 2 shrinks.
>     shrink path: 1:a2
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RTZ c at 1652:f -0 c at 1653:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1652:f |-> 0 0x0
>         ┃           │ c at 1653:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a2" FMA RTZ <var> -0.0 <var>
>   
>   ✗ FMA RTZ <var> -0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RTZ c at 1655:f -0 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1655:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RTZ <var> -0.0 +0.0
>   
>   ✗ FMA RTZ <var> -0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RTZ c at 1657:f -0 -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1657:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RTZ <var> -0.0 -0.0
>   
>   ✗ FMA RTZ <var> -0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RTZ c at 1659:f -0 NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1659:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RTZ <var> -0.0 NaN
>   
>   ✗ FMA RTZ <var> NaN <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 2 shrinks.
>     shrink path: 1:a2
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RTZ c at 1661:f NaN c at 1662:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1661:f |-> 0 0x0
>         ┃           │ c at 1662:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a2" FMA RTZ <var> NaN <var>
>   
>   ✗ FMA RTZ <var> NaN +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RTZ c at 1664:f NaN 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1664:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RTZ <var> NaN +0.0
>   
>   ✗ FMA RTZ <var> NaN -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RTZ c at 1666:f NaN -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1666:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RTZ <var> NaN -0.0
>   
>   ✗ FMA RTZ <var> NaN NaN failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RTZ c at 1668:f NaN NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1668:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RTZ <var> NaN NaN
>   
>   ✗ FMA RTZ +0.0 <var> <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 2 shrinks.
>     shrink path: 1:a2
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RTZ 0 c at 1670:f c at 1671:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1670:f |-> 0 0x0
>         ┃           │ c at 1671:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a2" FMA RTZ +0.0 <var> <var>
>   
>   ✗ FMA RTZ +0.0 <var> +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RTZ 0 c at 1673:f 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1673:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RTZ +0.0 <var> +0.0
>   
>   ✗ FMA RTZ +0.0 <var> -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RTZ 0 c at 1675:f -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1675:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RTZ +0.0 <var> -0.0
>   
>   ✗ FMA RTZ +0.0 <var> NaN failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RTZ 0 c at 1677:f NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1677:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RTZ +0.0 <var> NaN
>   
>   ✗ FMA RTZ +0.0 +0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RTZ 0 0 c at 1679:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1679:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RTZ +0.0 +0.0 <var>
>   
>   ✗ FMA RTZ +0.0 +0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RTZ +0.0 +0.0 +0.0
>   
>   ✗ FMA RTZ +0.0 +0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RTZ +0.0 +0.0 -0.0
>   
>   ✗ FMA RTZ +0.0 +0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RTZ +0.0 +0.0 NaN
>   
>   ✗ FMA RTZ +0.0 -0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RTZ 0 -0 c at 1681:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1681:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RTZ +0.0 -0.0 <var>
>   
>   ✗ FMA RTZ +0.0 -0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RTZ +0.0 -0.0 +0.0
>   
>   ✗ FMA RTZ +0.0 -0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RTZ +0.0 -0.0 -0.0
>   
>   ✗ FMA RTZ +0.0 -0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RTZ +0.0 -0.0 NaN
>   
>   ✗ FMA RTZ +0.0 NaN <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RTZ 0 NaN c at 1683:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1683:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RTZ +0.0 NaN <var>
>   
>   ✗ FMA RTZ +0.0 NaN +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RTZ +0.0 NaN +0.0
>   
>   ✗ FMA RTZ +0.0 NaN -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RTZ +0.0 NaN -0.0
>   
>   ✗ FMA RTZ +0.0 NaN NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RTZ +0.0 NaN NaN
>   
>   ✗ FMA RTZ -0.0 <var> <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 2 shrinks.
>     shrink path: 1:a2
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RTZ -0 c at 1685:f c at 1686:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1685:f |-> 0 0x0
>         ┃           │ c at 1686:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a2" FMA RTZ -0.0 <var> <var>
>   
>   ✗ FMA RTZ -0.0 <var> +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RTZ -0 c at 1688:f 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1688:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RTZ -0.0 <var> +0.0
>   
>   ✗ FMA RTZ -0.0 <var> -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RTZ -0 c at 1690:f -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1690:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RTZ -0.0 <var> -0.0
>   
>   ✗ FMA RTZ -0.0 <var> NaN failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RTZ -0 c at 1692:f NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1692:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RTZ -0.0 <var> NaN
>   
>   ✗ FMA RTZ -0.0 +0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RTZ -0 0 c at 1694:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1694:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RTZ -0.0 +0.0 <var>
>   
>   ✗ FMA RTZ -0.0 +0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RTZ -0.0 +0.0 +0.0
>   
>   ✗ FMA RTZ -0.0 +0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ -0 0x80000000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RTZ -0.0 +0.0 -0.0
>   
>   ✗ FMA RTZ -0.0 +0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RTZ -0.0 +0.0 NaN
>   
>   ✗ FMA RTZ -0.0 -0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RTZ -0 -0 c at 1696:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1696:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RTZ -0.0 -0.0 <var>
>   
>   ✗ FMA RTZ -0.0 -0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RTZ -0.0 -0.0 +0.0
>   
>   ✗ FMA RTZ -0.0 -0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ 0 0x0
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RTZ -0.0 -0.0 -0.0
>   
>   ✗ FMA RTZ -0.0 -0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RTZ -0.0 -0.0 NaN
>   
>   ✗ FMA RTZ -0.0 NaN <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RTZ -0 NaN c at 1698:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1698:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RTZ -0.0 NaN <var>
>   
>   ✗ FMA RTZ -0.0 NaN +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RTZ -0.0 NaN +0.0
>   
>   ✗ FMA RTZ -0.0 NaN -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RTZ -0.0 NaN -0.0
>   
>   ✗ FMA RTZ -0.0 NaN NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RTZ -0.0 NaN NaN
>   
>   ✗ FMA RTZ NaN <var> <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 2 shrinks.
>     shrink path: 1:a2
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RTZ NaN c at 1700:f c at 1701:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1700:f |-> 0 0x0
>         ┃           │ c at 1701:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a2" FMA RTZ NaN <var> <var>
>   
>   ✗ FMA RTZ NaN <var> +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RTZ NaN c at 1703:f 0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1703:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RTZ NaN <var> +0.0
>   
>   ✗ FMA RTZ NaN <var> -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RTZ NaN c at 1705:f -0
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1705:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RTZ NaN <var> -0.0
>   
>   ✗ FMA RTZ NaN <var> NaN failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RTZ NaN c at 1707:f NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1707:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RTZ NaN <var> NaN
>   
>   ✗ FMA RTZ NaN +0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RTZ NaN 0 c at 1709:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1709:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RTZ NaN +0.0 <var>
>   
>   ✗ FMA RTZ NaN +0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RTZ NaN +0.0 +0.0
>   
>   ✗ FMA RTZ NaN +0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RTZ NaN +0.0 -0.0
>   
>   ✗ FMA RTZ NaN +0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RTZ NaN +0.0 NaN
>   
>   ✗ FMA RTZ NaN -0.0 <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RTZ NaN -0 c at 1711:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1711:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RTZ NaN -0.0 <var>
>   
>   ✗ FMA RTZ NaN -0.0 +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RTZ NaN -0.0 +0.0
>   
>   ✗ FMA RTZ NaN -0.0 -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RTZ NaN -0.0 -0.0
>   
>   ✗ FMA RTZ NaN -0.0 NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RTZ NaN -0.0 NaN
>   
>   ✗ FMA RTZ NaN NaN <var> failed at test/TestTemplate.hs:656:66
>     after 1 test and 1 shrink.
>     shrink path: 1:a
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ floatFMA RTZ NaN NaN c at 1713:f
>     648 ┃           gmap <- forAllWith showMap gmapGen
>         ┃           │ c at 1713:f |-> 0 0x0
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:a" FMA RTZ NaN NaN <var>
>   
>   ✗ FMA RTZ NaN NaN +0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RTZ NaN NaN +0.0
>   
>   ✗ FMA RTZ NaN NaN -0.0 failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RTZ NaN NaN -0.0
>   
>   ✗ FMA RTZ NaN NaN NaN failed at test/TestTemplate.hs:656:66
>     after 1 test.
>     shrink path: 1:
>   
>         ┏━━ test/TestTemplate.hs ━━━
>     637 ┃ templateGroundEvalTestAlt ::
>     638 ┃   OnlineSolver solver =>
>     639 ┃   ExprBuilder t st fs ->
>     640 ┃   SolverProcess t solver ->
>     641 ┃   TestTemplate tp ->
>     642 ┃   Int ->
>     643 ┃   IO Property
>     644 ┃ templateGroundEvalTestAlt sym proc t numTests =
>     645 ┃   do (sz, gmapGen, expr) <- templateGen sym t
>     646 ┃      pure $ withTests (fromIntegral (max 1 (numTests * sz))) $ property $
>     647 ┃        do annotateShow (printSymExpr expr)
>         ┃        │ NaN
>     648 ┃           gmap <- forAllWith showMap gmapGen
>     649 ┃           v  <- liftIO (runMaybeT (mapGroundEval gmap expr))
>     650 ┃           case v of
>     651 ┃             Nothing -> success
>     652 ┃             Just v_ ->
>     653 ┃               do annotate (showGroundVal (exprType expr) v_)
>         ┃               │ NaN 0x7fc00000
>     654 ┃                  res <- liftIO (try (verifySolverEval sym proc gmap expr v_))
>     655 ┃                  case res of
>     656 ┃                    Left (ex :: IOError) -> footnote (show ex) >> failure
>         ┃                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     657 ┃                    Right b -> if b then success else failure
>   
>     fd:5: hPutBuf: resource vanished (Broken pipe)
>   
>     This failure can be reproduced by running:
>     > recheckAt (Seed 14059094355795328472 1048524260324818183) "1:" FMA RTZ NaN NaN NaN
>   
>   ✗ 1147 failed, 20 succeeded.
> Test suite template_tests: FAIL
> Test suite logged to: dist-ghc/test/what4-1.5.1-template_tests.log
> Test suite expr-builder-smtlib2: RUNNING...
> SOLVER SELF-REPORTED VERSIONS::
>   Solver cvc4 -> This is CVC4 version 1.8
>   Solver cvc5 -> This is cvc5 version 1.0.5
>   Solver z3 -> Z3 version 4.8.12 - 64 bit
> Tests
>   Float interpreted as real:               OK
>   Float uninterpreted:                     OK
>   Float interpreted as IEEE float:         OK
>   float binary simplification:             OK
>   real float binary simplification:        OK
>   float cast simplification:               OK
>   float cast no simplification:            OK
>   select shl simplification:               OK
>   select lshr simplification:              OK
>   bv or-shl-zext -> concat simplification: OK
>   bv domain arith scale:                   OK
>   test bvSwap:                             OK
>   test bvBitreverse:                       OK
>   test unsafeSetAbstractValue1:            OK
>   test unsafeSetAbstractValue2:            OK
>   CVC4 0-tuple:                            IGNORED
>     This test stalls the solver for some reason; line-buffering issue?
>   CVC4 1-tuple:                            OK (0.02s)
>   CVC4 pair:                               OK (0.03s)
>   CVC4 forall binder:                      OK (0.02s)
>   CVC4 string1:                            OK (0.02s)
>   CVC4 string2:                            OK (0.05s)
>   CVC4 string3:                            OK (0.17s)
>   CVC4 string4:                            OK (0.15s)
>   CVC4 string5:                            OK (0.04s)
>   CVC4 string6:                            OK (0.02s)
>   CVC4 string7:                            OK (1.45s)
>   CVC4 binder tuple1:                      OK (0.03s)
>   CVC4 binder tuple2:                      OK (0.05s)
>   CVC4 rounding:                           OK (0.10s)
>   CVC4 multidim array:                     OK (0.03s)
>   CVC4 #182 test case:                     OK (0.03s)
>   CVC4 0-tuple:                            IGNORED
>     This test stalls the solver for some reason; line-buffering issue?
>   CVC4 1-tuple:                            OK (0.03s)
>   CVC4 pair:                               OK (0.04s)
>   CVC4 forall binder:                      OK (0.02s)
>   CVC4 string1:                            OK (0.03s)
>   CVC4 string2:                            OK (0.05s)
>   CVC4 string3:                            OK (0.26s)
>   CVC4 string4:                            OK (0.19s)
>   CVC4 string5:                            OK (0.04s)
>   CVC4 string6:                            OK (0.02s)
>   CVC4 string7:                            OK (1.37s)
>   CVC4 binder tuple1:                      OK (0.01s)
>   CVC4 binder tuple2:                      OK (0.02s)
>   CVC4 rounding:                           OK (0.08s)
>   CVC4 multidim array:                     OK (0.04s)
>   CVC4 #182 test case:                     OK (0.02s)
>   uninterpreted function scope:            OK (0.04s)
>   rotate test1:                            OK (0.03s)
>   rotate test2:                            OK (0.04s)
>   rotate test3:                            OK (0.04s)
>   boundvarasfree:                          OK (0.04s)
>   solver info queries
>     test get solver version:               OK
>     test get solver name:                  OK
>   test solver version bounds:              OK
>   Unsat float formula:                     OK (0.06s)
>   Unsat float formula:                     OK (0.05s)
>   Sat float formula:                       OK (3.50s)
>   Sat float formula:                       OK (0.05s)
>   Sat float formula:                       OK (0.06s)
>   float to binary:                         OK (0.06s)
>   float from binary:                       OK (0.08s)
>   nested bitvector ites:                   OK (0.04s)
>   z3 symbol prime (') char:                OK (0.03s)
>   Z3 0-tuple:                              OK (0.03s)
>   Z3 1-tuple:                              OK (0.04s)
>   Z3 pair:                                 OK (0.04s)
>   Z3 forall binder:                        OK (0.03s)
>   Z3 string1:                              OK (0.07s)
>   Z3 string2:                              OK (0.06s)
>   Z3 string3:                              OK (0.30s)
>   Z3 string4:                              OK (0.48s)
>   Z3 string5:                              OK (0.06s)
>   Z3 string6:                              OK (0.05s)
>   Z3 string7:                              OK (0.66s)
>   Z3 binder tuple1:                        OK (0.03s)
>   Z3 binder tuple2:                        OK (0.03s)
>   Z3 rounding:                             OK (0.08s)
>   Z3 multidim array:                       OK (0.03s)
>   Z3 #182 test case:                       OK (0.04s)
>   arrayCopy:                               OK (0.18s)
>   arraySet:                                OK (0.10s)
>   arrayCopy/arraySet:                      OK (0.03s)
> 
> All 83 tests passed (10.92s)
> Test suite expr-builder-smtlib2: PASS
> Test suite logged to: dist-ghc/test/what4-1.5.1-expr-builder-smtlib2.log
> Test suite iteexprs_tests: RUNNING...
> Ite Expressions
>   Typed pred true
>     concrete Bool pred true:                 OK
>     concrete Integer pred true:              OK
>     concrete BV pred true:                   OK
>     concrete Struct pred true:               OK
>     concrete Array pred true:                OK
>   Typed pred false
>     concrete Bool pred false:                OK
>     concrete Integer pred false:             OK
>     concrete BV pred false:                  OK
>     concrete Struct pred false:              OK
>     concrete Array pred false:               OK
>   ConcretePredNegation
>     Typed not true
>       concrete Bool not true:                OK
>       concrete Integer not true:             OK
>       concrete BV not true:                  OK
>       concrete Struct not true:              OK
>       concrete Array not true:               OK
>     Typed not false
>       concrete Bool not false:               OK
>       concrete Integer not false:            OK
>       concrete BV not false:                 OK
>       concrete Struct not false:             OK
>       concrete Array not false:              OK
>     Typed not not true
>       concrete Bool not not true:            OK
>       concrete Integer not not true:         OK
>       concrete BV not not true:              OK
>       concrete Struct not not true:          OK
>       concrete Array not not true:           OK
>     Typed not not false
>       concrete Bool not not false:           OK
>       concrete Integer not not false:        OK
>       concrete BV not not false:             OK
>       concrete Struct not not false:         OK
>       concrete Array not not false:          OK
>   ConcretePredAnd
>     Typed and true  true
>       concrete Bool and true  true:          OK
>       concrete Integer and true  true:       OK
>       concrete BV and true  true:            OK
>       concrete Struct and true  true:        OK
>       concrete Array and true  true:         OK
>     Typed and true  false
>       concrete Bool and true  false:         OK
>       concrete Integer and true  false:      OK
>       concrete BV and true  false:           OK
>       concrete Struct and true  false:       OK
>       concrete Array and true  false:        OK
>     Typed and false true
>       concrete Bool and false true:          OK
>       concrete Integer and false true:       OK
>       concrete BV and false true:            OK
>       concrete Struct and false true:        OK
>       concrete Array and false true:         OK
>     Typed and false false
>       concrete Bool and false false:         OK
>       concrete Integer and false false:      OK
>       concrete BV and false false:           OK
>       concrete Struct and false false:       OK
>       concrete Array and false false:        OK
>     Typed and true  (not true)
>       concrete Bool and true  (not true):    OK
>       concrete Integer and true  (not true): OK
>       concrete BV and true  (not true):      OK
>       concrete Struct and true  (not true):  OK
>       concrete Array and true  (not true):   OK
>     Typed and (not false) true
>       concrete Bool and (not false) true:    OK
>       concrete Integer and (not false) true: OK
>       concrete BV and (not false) true:      OK
>       concrete Struct and (not false) true:  OK
>       concrete Array and (not false) true:   OK
>     Typed not (and false true)
>       concrete Bool not (and false true):    OK
>       concrete Integer not (and false true): OK
>       concrete BV not (and false true):      OK
>       concrete Struct not (and false true):  OK
>       concrete Array not (and false true):   OK
>   ConcretePredOr
>     Typed or true  true
>       concrete Bool or true  true:           OK
>       concrete Integer or true  true:        OK
>       concrete BV or true  true:             OK
>       concrete Struct or true  true:         OK
>       concrete Array or true  true:          OK
>     Typed or true  false
>       concrete Bool or true  false:          OK
>       concrete Integer or true  false:       OK
>       concrete BV or true  false:            OK
>       concrete Struct or true  false:        OK
>       concrete Array or true  false:         OK
>     Typed or false true
>       concrete Bool or false true:           OK
>       concrete Integer or false true:        OK
>       concrete BV or false true:             OK
>       concrete Struct or false true:         OK
>       concrete Array or false true:          OK
>     Typed or false false
>       concrete Bool or false false:          OK
>       concrete Integer or false false:       OK
>       concrete BV or false false:            OK
>       concrete Struct or false false:        OK
>       concrete Array or false false:         OK
>     Typed or true  (not true)
>       concrete Bool or true  (not true):     OK
>       concrete Integer or true  (not true):  OK
>       concrete BV or true  (not true):       OK
>       concrete Struct or true  (not true):   OK
>       concrete Array or true  (not true):    OK
>     Typed or (not false) false
>       concrete Bool or (not false) false:    OK
>       concrete Integer or (not false) false: OK
>       concrete BV or (not false) false:      OK
>       concrete Struct or (not false) false:  OK
>       concrete Array or (not false) false:   OK
>     Typed not (or false false)
>       concrete Bool not (or false false):    OK
>       concrete Integer not (or false false): OK
>       concrete BV not (or false false):      OK
>       concrete Struct not (or false false):  OK
>       concrete Array not (or false false):   OK
>   ConcreteEqPred
>     Typed equal trues
>       concrete Bool equal trues:             OK
>       concrete Integer equal trues:          OK
>       concrete BV equal trues:               OK
>       concrete Struct equal trues:           OK
>       concrete Array equal trues:            OK
>     Typed equal falses
>       concrete Bool equal falses:            OK
>       concrete Integer equal falses:         OK
>       concrete BV equal falses:              OK
>       concrete Struct equal falses:          OK
>       concrete Array equal falses:           OK
>     Typed not equal
>       concrete Bool not equal:               OK
>       concrete Integer not equal:            OK
>       concrete BV not equal:                 OK
>       concrete Struct not equal:             OK
>       concrete Array not equal:              OK
>     Typed eq right neg
>       concrete Bool eq right neg:            OK
>       concrete Integer eq right neg:         OK
>       concrete BV eq right neg:              OK
>       concrete Struct eq right neg:          OK
>       concrete Array eq right neg:           OK
>     Typed eq left neq
>       concrete Bool eq left neq:             OK
>       concrete Integer eq left neq:          OK
>       concrete BV eq left neq:               OK
>       concrete Struct eq left neq:           OK
>       concrete Array eq left neq:            OK
>     Typed not (eq false true)
>       concrete Bool not (eq false true):     OK
>       concrete Integer not (eq false true):  OK
>       concrete BV not (eq false true):       OK
>       concrete Struct not (eq false true):   OK
>       concrete Array not (eq false true):    OK
>   ConcreteXORPred
>     Typed xor trues
>       concrete Bool xor trues:               OK
>       concrete Integer xor trues:            OK
>       concrete BV xor trues:                 OK
>       concrete Struct xor trues:             OK
>       concrete Array xor trues:              OK
>     Typed xor falses
>       concrete Bool xor falses:              OK
>       concrete Integer xor falses:           OK
>       concrete BV xor falses:                OK
>       concrete Struct xor falses:            OK
>       concrete Array xor falses:             OK
>     Typed xor t f
>       concrete Bool xor t f:                 OK
>       concrete Integer xor t f:              OK
>       concrete BV xor t f:                   OK
>       concrete Struct xor t f:               OK
>       concrete Array xor t f:                OK
>     Typed xor right neg
>       concrete Bool xor right neg:           OK
>       concrete Integer xor right neg:        OK
>       concrete BV xor right neg:             OK
>       concrete Struct xor right neg:         OK
>       concrete Array xor right neg:          OK
>     Typed xor left neq
>       concrete Bool xor left neq:            OK
>       concrete Integer xor left neq:         OK
>       concrete BV xor left neq:              OK
>       concrete Struct xor left neq:          OK
>       concrete Array xor left neq:           OK
>     Typed not (xor f t)
>       concrete Bool not (xor f t):           OK
>       concrete Integer not (xor f t):        OK
>       concrete BV not (xor f t):             OK
>       concrete Struct not (xor f t):         OK
>       concrete Array not (xor f t):          OK
>   generated concrete predicates
>     bool mux:                                OK (1.46s)
>         ✓ bool mux passed 500 tests.
>           and cases         6% █▏·················· ✓ 2%
>           or cases         59% ███████████▊········ ✓ 2%
>           eq cases          7% █▍·················· ✓ 2%
>           xor cases        43% ████████▋··········· ✓ 2%
>           not cases        47% █████████▍·········· ✓ 2%
>           intEq cases       9% █▋·················· ✓ 2%
>           intLe cases       5% ▉··················· ✓ 2%
>           intLt cases       7% █▍·················· ✓ 2%
>           intAdd cases     11% ██▏················· ✓ 2%
>           intSub cases     10% ██·················· ✓ 2%
>           intMul cases     10% ██·················· ✓ 2%
>           intDiv cases     11% ██▏················· ✓ 2%
>           intMod cases     11% ██▏················· ✓ 2%
>           intIte cases     10% ██·················· ✓ 2%
>           bvCount... cases 59% ███████████▊········ ✓ 2%
>     int mux:                                 OK (1.11s)
>         ✓ int mux passed 500 tests.
>           and cases         6% █··················· ✓ 2%
>           or cases         64% ████████████▊······· ✓ 2%
>           eq cases          8% █▌·················· ✓ 2%
>           xor cases        45% █████████··········· ✓ 2%
>           not cases        48% █████████▌·········· ✓ 2%
>           intEq cases       5% █··················· ✓ 2%
>           intLe cases       5% █··················· ✓ 2%
>           intLt cases       5% █··················· ✓ 2%
>           intAdd cases      8% █▌·················· ✓ 2%
>           intSub cases      8% █▋·················· ✓ 2%
>           intMul cases      7% █▍·················· ✓ 2%
>           intDiv cases      8% █▋·················· ✓ 2%
>           intMod cases      8% █▌·················· ✓ 2%
>           intIte cases      8% █▋·················· ✓ 2%
>           bvCount... cases 62% ████████████▍······· ✓ 2%
>     bv16 mux:                                OK (0.81s)
>         ✓ bv16 mux passed 500 tests.
>           and cases         5% █··················· ✓ 2%
>           or cases         58% ███████████▌········ ✓ 2%
>           eq cases          6% █▏·················· ✓ 2%
>           xor cases        42% ████████▎··········· ✓ 2%
>           not cases        45% █████████··········· ✓ 2%
>           intEq cases       5% █··················· ✓ 2%
>           intLe cases       4% ▉··················· ✓ 2%
>           intLt cases       5% ▉··················· ✓ 2%
>           intAdd cases      7% █▍·················· ✓ 2%
>           intSub cases      8% █▋·················· ✓ 2%
>           intMul cases      7% █▍·················· ✓ 2%
>           intDiv cases      8% █▌·················· ✓ 2%
>           intMod cases      8% █▋·················· ✓ 2%
>           intIte cases      8% █▋·················· ✓ 2%
>           bvCount... cases 59% ███████████▊········ ✓ 2%
>     struct mux:                              OK (1.72s)
>         ✓ struct mux passed 500 tests.
>           and cases         7% █▎·················· ✓ 2%
>           or cases         63% ████████████▌······· ✓ 2%
>           eq cases          5% █··················· ✓ 2%
>           xor cases        46% █████████▏·········· ✓ 2%
>           not cases        50% ██████████·········· ✓ 2%
>           intEq cases       7% █▎·················· ✓ 2%
>           intLe cases       6% █··················· ✓ 2%
>           intLt cases       7% █▍·················· ✓ 2%
>           intAdd cases     10% ██·················· ✓ 2%
>           intSub cases     10% ██·················· ✓ 2%
>           intMul cases     10% ██·················· ✓ 2%
>           intDiv cases     10% ██·················· ✓ 2%
>           intMod cases     10% █▉·················· ✓ 2%
>           intIte cases     10% █▉·················· ✓ 2%
>           bvCount... cases 60% ████████████········ ✓ 2%
>     array mux:                               OK (0.84s)
>         ✓ array mux passed 500 tests.
>           and cases         3% ▋··················· ✓ 2%
>           or cases         63% ████████████▌······· ✓ 2%
>           eq cases          6% █··················· ✓ 2%
>           xor cases        43% ████████▌··········· ✓ 2%
>           not cases        47% █████████▍·········· ✓ 2%
>           intEq cases       3% ▋··················· ✓ 2%
>           intLe cases       7% █▎·················· ✓ 2%
>           intLt cases       6% █▏·················· ✓ 2%
>           intAdd cases      9% █▉·················· ✓ 2%
>           intSub cases     10% █▉·················· ✓ 2%
>           intMul cases     10% █▉·················· ✓ 2%
>           intDiv cases      9% █▊·················· ✓ 2%
>           intMod cases      9% █▊·················· ✓ 2%
>           intIte cases     10% █▉·················· ✓ 2%
>           bvCount... cases 61% ████████████········ ✓ 2%
> 
> All 165 tests passed (5.97s)
> Test suite iteexprs_tests: PASS
> Test suite logged to: dist-ghc/test/what4-1.5.1-iteexprs_tests.log
> Test suite bvdomain_tests_hh: RUNNING...
> Bitvector Domain
>   Arith Domain
>     correct_any:                 OK (0.06s)
>         ✓ correct_any passed 5000 tests.
>     correct_ubounds:             OK (0.09s)
>         ✓ correct_ubounds passed 5000 tests.
>     correct_sbounds:             OK (0.08s)
>         ✓ correct_sbounds passed 5000 tests.
>     correct_singleton:           OK (0.06s)
>         ✓ correct_singleton passed 5000 tests.
>     correct_overlap:             OK (0.26s)
>         ✓ correct_overlap passed 5000 tests.
>     correct_union:               OK (0.14s)
>         ✓ correct_union passed 5000 tests.
>     correct_zero_ext:            OK (0.09s)
>         ✓ correct_zero_ext passed 5000 tests.
>     correct_sign_ext:            OK (0.09s)
>         ✓ correct_sign_ext passed 5000 tests.
>     correct_concat:              OK (0.13s)
>         ✓ correct_concat passed 5000 tests.
>     correct_shrink:              OK (0.10s)
>         ✓ correct_shrink passed 5000 tests.
>     correct_trunc:               OK (0.09s)
>         ✓ correct_trunc passed 5000 tests.
>     correct_select:              OK (0.12s)
>         ✓ correct_select passed 5000 tests.
>     correct_add:                 OK (0.11s)
>         ✓ correct_add passed 5000 tests.
>     correct_neg:                 OK (0.08s)
>         ✓ correct_neg passed 5000 tests.
>     correct_not:                 OK (0.08s)
>         ✓ correct_not passed 5000 tests.
>     correct_mul:                 OK (0.12s)
>         ✓ correct_mul passed 5000 tests.
>     correct_scale:               OK (0.10s)
>         ✓ correct_scale passed 5000 tests.
>     correct_scale_eq:            OK (0.08s)
>         ✓ correct_scale_eq passed 5000 tests.
>     correct_udiv:                OK (0.16s)
>         ✓ correct_udiv passed 5000 tests.
>     correct_urem:                OK (0.14s)
>         ✓ correct_urem passed 5000 tests.
>     correct_sdiv:                OK (0.16s)
>         ✓ correct_sdiv passed 5000 tests.
>     correct_sdivRange:           OK (2.77s)
>         ✓ correct_sdivRange passed 5000 tests.
>     correct_srem:                OK (0.15s)
>         ✓ correct_srem passed 5000 tests.
>     correct_shl:                 OK (0.11s)
>         ✓ correct_shl passed 5000 tests.
>     correct_lshr:                OK (0.12s)
>         ✓ correct_lshr passed 5000 tests.
>     correct_ashr:                OK (0.12s)
>         ✓ correct_ashr passed 5000 tests.
>     correct_eq:                  OK (0.12s)
>         ✓ correct_eq passed 5000 tests.
>     correct_ult:                 OK (0.12s)
>         ✓ correct_ult passed 5000 tests.
>     correct_slt:                 OK (0.12s)
>         ✓ correct_slt passed 5000 tests.
>     correct_isUltSumCommonEquiv: OK (0.28s)
>         ✓ correct_isUltSumCommonEquiv passed 5000 tests.
>     correct_unknowns:            OK (0.09s)
>         ✓ correct_unknowns passed 5000 tests.
>     correct_bitbounds:           OK (0.09s)
>         ✓ correct_bitbounds passed 5000 tests.
>   Bitwise Domain
>     correct_any:                 OK (0.04s)
>         ✓ correct_any passed 5000 tests.
>     correct_singleton:           OK (0.06s)
>         ✓ correct_singleton passed 5000 tests.
>     correct_overlap:             OK (0.41s)
>         ✓ correct_overlap passed 5000 tests.
>     correct_union1:              OK (0.13s)
>         ✓ correct_union1 passed 5000 tests.
>     correct_union2:              OK (0.18s)
>         ✓ correct_union2 passed 5000 tests.
>     correct_intersection:        OK (0.42s)
>         ✓ correct_intersection passed 5000 tests.
>     correct_zero_ext:            OK (0.09s)
>         ✓ correct_zero_ext passed 5000 tests.
>     correct_sign_ext:            OK (0.11s)
>         ✓ correct_sign_ext passed 5000 tests.
>     correct_concat:              OK (0.13s)
>         ✓ correct_concat passed 5000 tests.
>     correct_shrink:              OK (0.12s)
>         ✓ correct_shrink passed 5000 tests.
>     correct_trunc:               OK (0.15s)
>         ✓ correct_trunc passed 5000 tests.
>     correct_select:              OK (0.18s)
>         ✓ correct_select passed 5000 tests.
>     correct_shl:                 OK (0.09s)
>         ✓ correct_shl passed 5000 tests.
>     correct_lshr:                OK (0.12s)
>         ✓ correct_lshr passed 5000 tests.
>     correct_ashr:                OK (0.14s)
>         ✓ correct_ashr passed 5000 tests.
>     correct_rol:                 OK (0.14s)
>         ✓ correct_rol passed 5000 tests.
>     correct_ror:                 OK (0.11s)
>         ✓ correct_ror passed 5000 tests.
>     correct_eq:                  OK (0.11s)
>         ✓ correct_eq passed 5000 tests.
>     correct_not:                 OK (0.09s)
>         ✓ correct_not passed 5000 tests.
>     correct_and:                 OK (0.13s)
>         ✓ correct_and passed 5000 tests.
>     correct_or:                  OK (0.13s)
>         ✓ correct_or passed 5000 tests.
>     correct_xor:                 OK (0.13s)
>         ✓ correct_xor passed 5000 tests.
>     correct_testBit:             OK (0.11s)
>         ✓ correct_testBit passed 5000 tests.
>   XOR Domain
>     correct_singleton:           OK (0.07s)
>         ✓ correct_singleton passed 5000 tests.
>     correct_xor:                 OK (0.13s)
>         ✓ correct_xor passed 5000 tests.
>     correct_and:                 OK (0.12s)
>         ✓ correct_and passed 5000 tests.
>     correct_and_scalar:          OK (0.10s)
>         ✓ correct_and_scalar passed 5000 tests.
>     correct_bitbounds:           OK (0.07s)
>         ✓ correct_bitbounds passed 5000 tests.
>   Overall Domain
>     singleton/union size:        OK (0.47s)
>         ✓ singleton/union size passed 5000 tests.
>     correct_bra1:                OK (0.09s)
>         ✓ correct_bra1 passed 5000 tests.
>     correct_bra2:                OK (0.22s)
>         ✓ correct_bra2 passed 5000 tests.
>     correct_brb1:                OK (0.24s)
>         ✓ correct_brb1 passed 5000 tests.
>     correct_brb2:                OK (0.32s)
>         ✓ correct_brb2 passed 5000 tests.
>     correct_any:                 OK (0.04s)
>         ✓ correct_any passed 5000 tests.
>     correct_ubounds:             OK (0.09s)
>         ✓ correct_ubounds passed 5000 tests.
>     correct_sbounds:             OK (0.10s)
>         ✓ correct_sbounds passed 5000 tests.
>     correct_singleton:           OK (0.06s)
>         ✓ correct_singleton passed 5000 tests.
>     correct_overlap:             OK (0.42s)
>         ✓ correct_overlap passed 5000 tests.
>     precise_overlap:             OK (0.18s)
>         ✓ precise_overlap passed 5000 tests.
>     correct_union:               OK (0.22s)
>         ✓ correct_union passed 5000 tests.
>     correct_zero_ext:            OK (0.11s)
>         ✓ correct_zero_ext passed 5000 tests.
>     correct_sign_ext:            OK (0.11s)
>         ✓ correct_sign_ext passed 5000 tests.
>     correct_concat:              OK (0.16s)
>         ✓ correct_concat passed 5000 tests.
>     correct_select:              OK (0.18s)
>         ✓ correct_select passed 5000 tests.
>     correct_add:                 OK (0.20s)
>         ✓ correct_add passed 5000 tests.
>     correct_neg:                 OK (0.11s)
>         ✓ correct_neg passed 5000 tests.
>     correct_scale:               OK (0.14s)
>         ✓ correct_scale passed 5000 tests.
>     correct_mul:                 OK (0.16s)
>         ✓ correct_mul passed 5000 tests.
>     correct_udiv:                OK (0.18s)
>         ✓ correct_udiv passed 5000 tests.
>     correct_urem:                OK (0.20s)
>         ✓ correct_urem passed 5000 tests.
>     correct_sdiv:                OK (0.18s)
>         ✓ correct_sdiv passed 5000 tests.
>     correct_srem:                OK (0.22s)
>         ✓ correct_srem passed 5000 tests.
>     correct_shl:                 OK (0.19s)
>         ✓ correct_shl passed 5000 tests.
>     correct_lshr:                OK (0.15s)
>         ✓ correct_lshr passed 5000 tests.
>     correct_ashr:                OK (0.15s)
>         ✓ correct_ashr passed 5000 tests.
>     correct_rol:                 OK (0.16s)
>         ✓ correct_rol passed 5000 tests.
>     correct_ror:                 OK (0.16s)
>         ✓ correct_ror passed 5000 tests.
>     correct_eq:                  OK (0.21s)
>         ✓ correct_eq passed 5000 tests.
>     correct_ult:                 OK (0.18s)
>         ✓ correct_ult passed 5000 tests.
>     correct_slt:                 OK (0.15s)
>         ✓ correct_slt passed 5000 tests.
>     correct_not:                 OK (0.10s)
>         ✓ correct_not passed 5000 tests.
>     correct_and:                 OK (0.16s)
>         ✓ correct_and passed 5000 tests.
>     correct_or:                  OK (0.15s)
>         ✓ correct_or passed 5000 tests.
>     correct_xor:                 OK (0.14s)
>         ✓ correct_xor passed 5000 tests.
>     correct_testBit:             OK (0.12s)
>         ✓ correct_testBit passed 5000 tests.
>     correct_popcnt:              OK (0.09s)
>         ✓ correct_popcnt passed 5000 tests.
>     correct_clz:                 OK (0.10s)
>         ✓ correct_clz passed 5000 tests.
>     correct_ctz:                 OK (0.09s)
>         ✓ correct_ctz passed 5000 tests.
>   Transfer
>     correct_arithToBitwise:      OK (0.07s)
>         ✓ correct_arithToBitwise passed 5000 tests.
>     correct_bitwiseToArith:      OK (0.08s)
>         ✓ correct_bitwiseToArith passed 5000 tests.
>     correct_bitwiseToXorDomain:  OK (0.09s)
>         ✓ correct_bitwiseToXorDomain passed 5000 tests.
>     correct_arithToXorDomain:    OK (0.08s)
>         ✓ correct_arithToXorDomain passed 5000 tests.
>     correct_xorToBitwiseDomain:  OK (0.09s)
>         ✓ correct_xorToBitwiseDomain passed 5000 tests.
>     correct_asXorDomain:         OK (0.10s)
>         ✓ correct_asXorDomain passed 5000 tests.
>     correct_fromXorDomain:       OK (0.09s)
>         ✓ correct_fromXorDomain passed 5000 tests.
> 
> All 107 tests passed (17.93s)
> Test suite bvdomain_tests_hh: PASS
> Test suite logged to: dist-ghc/test/what4-1.5.1-bvdomain_tests_hh.log
> Test suite bvdomain_tests: RUNNING...
> Bitvector Domain
>   Arith Domain
>     correct_any:                 OK (0.02s)
>       +++ OK, passed 5000 tests.
>     correct_ubounds:             OK (0.02s)
>       +++ OK, passed 5000 tests.
>     correct_sbounds:             OK (0.03s)
>       +++ OK, passed 5000 tests.
>     correct_singleton:           OK (0.01s)
>       +++ OK, passed 5000 tests.
>     correct_overlap:             OK (0.07s)
>       +++ OK, passed 5000 tests; 13367 discarded.
>     correct_union:               OK (0.02s)
>       +++ OK, passed 5000 tests; 1493 discarded.
>     correct_zero_ext:            OK (0.03s)
>       +++ OK, passed 5000 tests.
>     correct_sign_ext:            OK (0.03s)
>       +++ OK, passed 5000 tests.
>     correct_concat:              OK (0.03s)
>       +++ OK, passed 5000 tests.
>     correct_shrink:              OK (0.02s)
>       +++ OK, passed 5000 tests.
>     correct_trunc:               OK (0.02s)
>       +++ OK, passed 5000 tests.
>     correct_select:              OK (0.03s)
>       +++ OK, passed 5000 tests.
>     correct_add:                 OK (0.05s)
>       +++ OK, passed 5000 tests.
>     correct_neg:                 OK (0.02s)
>       +++ OK, passed 5000 tests.
>     correct_not:                 OK (0.02s)
>       +++ OK, passed 5000 tests.
>     correct_mul:                 OK (0.02s)
>       +++ OK, passed 5000 tests.
>     correct_scale:               OK (0.02s)
>       +++ OK, passed 5000 tests.
>     correct_scale_eq:            OK (0.02s)
>       +++ OK, passed 5000 tests.
>     correct_udiv:                OK (0.03s)
>       +++ OK, passed 5000 tests; 182 discarded.
>     correct_urem:                OK (0.03s)
>       +++ OK, passed 5000 tests; 175 discarded.
>     correct_sdiv:                OK (0.03s)
>       +++ OK, passed 5000 tests; 174 discarded.
>     correct_sdivRange:           OK (0.39s)
>       +++ OK, passed 5000 tests; 147435 discarded.
>     correct_srem:                OK (0.03s)
>       +++ OK, passed 5000 tests; 180 discarded.
>     correct_shl:                 OK (0.03s)
>       +++ OK, passed 5000 tests.
>     correct_lshr:                OK (0.03s)
>       +++ OK, passed 5000 tests.
>     correct_ashr:                OK (0.03s)
>       +++ OK, passed 5000 tests.
>     correct_eq:                  OK (0.03s)
>       +++ OK, passed 5000 tests.
>     correct_ult:                 OK (0.03s)
>       +++ OK, passed 5000 tests.
>     correct_slt:                 OK (0.02s)
>       +++ OK, passed 5000 tests.
>     correct_isUltSumCommonEquiv: OK (1.08s)
>       +++ OK, passed 5000 tests; 132885 discarded.
>     correct_unknowns:            OK (0.02s)
>       +++ OK, passed 5000 tests.
>     correct_bitbounds:           OK (0.02s)
>       +++ OK, passed 5000 tests.
>   Bitwise Domain
>     correct_any:                 OK
>       +++ OK, passed 5000 tests.
>     correct_singleton:           OK (0.01s)
>       +++ OK, passed 5000 tests.
>     correct_overlap:             OK (1.49s)
>       +++ OK, passed 5000 tests; 437985 discarded.
>     correct_union1:              OK (0.01s)
>       +++ OK, passed 5000 tests.
>     correct_union2:              OK (0.02s)
>       +++ OK, passed 5000 tests.
>     correct_intersection:        OK (1.48s)
>       +++ OK, passed 5000 tests; 419213 discarded.
>     correct_zero_ext:            OK (0.02s)
>       +++ OK, passed 5000 tests.
>     correct_sign_ext:            OK (0.02s)
>       +++ OK, passed 5000 tests.
>     correct_concat:              OK (0.04s)
>       +++ OK, passed 5000 tests.
>     correct_shrink:              OK (0.03s)
>       +++ OK, passed 5000 tests.
>     correct_trunc:               OK (0.01s)
>       +++ OK, passed 5000 tests.
>     correct_select:              OK (0.03s)
>       +++ OK, passed 5000 tests.
>     correct_shl:                 OK (0.03s)
>       +++ OK, passed 5000 tests.
>     correct_lshr:                OK
>       +++ OK, passed 5000 tests.
>     correct_ashr:                OK (0.02s)
>       +++ OK, passed 5000 tests.
>     correct_rol:                 OK (0.03s)
>       +++ OK, passed 5000 tests.
>     correct_ror:                 OK (0.03s)
>       +++ OK, passed 5000 tests.
>     correct_eq:                  OK (0.03s)
>       +++ OK, passed 5000 tests.
>     correct_not:                 OK (0.02s)
>       +++ OK, passed 5000 tests.
>     correct_and:                 OK (0.03s)
>       +++ OK, passed 5000 tests.
>     correct_or:                  OK (0.03s)
>       +++ OK, passed 5000 tests.
>     correct_xor:                 OK (0.04s)
>       +++ OK, passed 5000 tests.
>     correct_testBit:             OK (0.02s)
>       +++ OK, passed 5000 tests.
>   XOR Domain
>     correct_singleton:           OK (0.01s)
>       +++ OK, passed 5000 tests.
>     correct_xor:                 OK (0.04s)
>       +++ OK, passed 5000 tests.
>     correct_and:                 OK (0.03s)
>       +++ OK, passed 5000 tests.
>     correct_and_scalar:          OK (0.03s)
>       +++ OK, passed 5000 tests.
>     correct_bitbounds:           OK (0.02s)
>       +++ OK, passed 5000 tests.
>   Overall Domain
>     singleton/union size:        OK (0.73s)
>       +++ OK, passed 5000 tests.
>     correct_bra1:                OK (0.02s)
>       +++ OK, passed 5000 tests; 4740 discarded.
>     correct_bra2:                OK (0.29s)
>       +++ OK, passed 5000 tests; 119401 discarded.
>     correct_brb1:                OK (0.53s)
>       +++ OK, passed 5000 tests; 191545 discarded.
>     correct_brb2:                OK (1.47s)
>       +++ OK, passed 5000 tests; 436091 discarded.
>     correct_any:                 OK
>       +++ OK, passed 5000 tests.
>     correct_ubounds:             OK (0.02s)
>       +++ OK, passed 5000 tests.
>     correct_sbounds:             OK (0.02s)
>       +++ OK, passed 5000 tests.
>     correct_singleton:           OK (0.01s)
>       +++ OK, passed 5000 tests.
>     correct_overlap:             OK (0.23s)
>       +++ OK, passed 5000 tests; 54856 discarded.
>     precise_overlap:             OK (0.03s)
>       +++ OK, passed 5000 tests; 3806 discarded.
>     correct_union:               OK (0.05s)
>       +++ OK, passed 5000 tests; 5748 discarded.
>     correct_zero_ext:            OK
>       +++ OK, passed 5000 tests.
>     correct_sign_ext:            OK (0.02s)
>       +++ OK, passed 5000 tests.
>     correct_concat:              OK (0.04s)
>       +++ OK, passed 5000 tests.
>     correct_select:              OK (0.03s)
>       +++ OK, passed 5000 tests.
>     correct_add:                 OK (0.03s)
>       +++ OK, passed 5000 tests.
>     correct_neg:                 OK (0.02s)
>       +++ OK, passed 5000 tests.
>     correct_scale:               OK (0.03s)
>       +++ OK, passed 5000 tests.
>     correct_mul:                 OK (0.05s)
>       +++ OK, passed 5000 tests.
>     correct_udiv:                OK (0.05s)
>       +++ OK, passed 5000 tests; 125 discarded.
>     correct_urem:                OK (0.05s)
>       +++ OK, passed 5000 tests; 145 discarded.
>     correct_sdiv:                OK (0.05s)
>       +++ OK, passed 5000 tests; 137 discarded.
>     correct_srem:                OK (0.05s)
>       +++ OK, passed 5000 tests; 147 discarded.
>     correct_shl:                 OK (0.04s)
>       +++ OK, passed 5000 tests.
>     correct_lshr:                OK (0.04s)
>       +++ OK, passed 5000 tests.
>     correct_ashr:                OK (0.05s)
>       +++ OK, passed 5000 tests.
>     correct_rol:                 OK (0.03s)
>       +++ OK, passed 5000 tests.
>     correct_ror:                 OK (0.04s)
>       +++ OK, passed 5000 tests.
>     correct_eq:                  OK (0.04s)
>       +++ OK, passed 5000 tests.
>     correct_ult:                 OK (0.04s)
>       +++ OK, passed 5000 tests.
>     correct_slt:                 OK (0.04s)
>       +++ OK, passed 5000 tests.
>     correct_not:                 OK (0.02s)
>       +++ OK, passed 5000 tests.
>     correct_and:                 OK (0.04s)
>       +++ OK, passed 5000 tests.
>     correct_or:                  OK (0.04s)
>       +++ OK, passed 5000 tests.
>     correct_xor:                 OK (0.04s)
>       +++ OK, passed 5000 tests.
>     correct_testBit:             OK (0.02s)
>       +++ OK, passed 5000 tests.
>     correct_popcnt:              OK (0.02s)
>       +++ OK, passed 5000 tests.
>     correct_clz:                 OK (0.03s)
>       +++ OK, passed 5000 tests.
>     correct_ctz:                 OK (0.02s)
>       +++ OK, passed 5000 tests.
>   Transfer
>     correct_arithToBitwise:      OK (0.02s)
>       +++ OK, passed 5000 tests.
>     correct_bitwiseToArith:      OK (0.02s)
>       +++ OK, passed 5000 tests.
>     correct_bitwiseToXorDomain:  OK (0.02s)
>       +++ OK, passed 5000 tests.
>     correct_arithToXorDomain:    OK
>       +++ OK, passed 5000 tests.
>     correct_xorToBitwiseDomain:  OK (0.02s)
>       +++ OK, passed 5000 tests.
>     correct_asXorDomain:         OK (0.02s)
>       +++ OK, passed 5000 tests.
>     correct_fromXorDomain:       OK
>       +++ OK, passed 5000 tests.
> 
> All 107 tests passed (10.54s)
> Test suite bvdomain_tests: PASS
> Test suite logged to: dist-ghc/test/what4-1.5.1-bvdomain_tests.log
> Test suite exprs_tests: RUNNING...
> What4 Expressions
>   d <- intDiv sym x y; m <- intMod sym x y ===> y * d + m == x and 0 <= m < y: OK
>       ✓ d <- intDiv sym x y; m <- intMod sym x y ===> y * d + m == x and 0 <= m < y passed 100 tests.
>   bvIsNeg
>     -1.32 bvIsNeg.32:                                                          OK
>     -1 bvIsNeg.32:                                                             OK
>     0xffffffff bvIsNeg.32:                                                     OK
>     0x80000000 bvIsNeg.32:                                                     OK
>     0x7fffffff !bvIsNeg.32:                                                    OK
>     0 !bvIsNeg.32:                                                             OK
>     bvIsNeg.32:                                                                OK
>         ✓ bvIsNeg.32 passed 100 tests.
>     !bvIsNeg.32:                                                               OK
>         ✓ !bvIsNeg.32 passed 100 tests.
>   int operators
>     n * m == m * n:                                                            OK
>         ✓ n * m == m * n passed 100 tests.
>     |n| >= 0:                                                                  OK
>         ✓ |n| >= 0 passed 100 tests.
>     integer division and mod
>       y * (div x y) + (mod x y) == x:                                          OK
>           ✓ y * (div x y) + (mod x y) == x passed 100 tests.
>       mod x y == mod x (- y) == mod x (abs y):                                 OK
>           ✓ mod x y == mod x (- y) == mod x (abs y) passed 100 tests.
>       div x (-y) == -(div x y):                                                OK
>           ✓ div x (-y) == -(div x y) passed 100 tests.
>     int min/max
>       (j <= c && c <= i) -> intMax j i == intMax i j == i:                     OK
>           ✓ (j <= c && c <= i) -> intMax j i == intMax i j == i passed 100 tests.
>       (lo_i <= i && lo_j <= j) -> (max lo_j lo_j) <= intMax i j:               OK
>           ✓ (lo_i <= i && lo_j <= j) -> (max lo_j lo_j) <= intMax i j passed 100 tests.
>       (i <= c && c <= j) -> intMin j i == intMin i j == i:                     OK
>           ✓ (i <= c && c <= j) -> intMin j i == intMin i j == i passed 100 tests.
>       (i <= hi_i && j <= hi_j) -> intMin i j <= (min hi_j hi_j):               OK
>           ✓ (i <= hi_i && j <= hi_j) -> intMin i j <= (min hi_j hi_j) passed 100 tests.
>   stringEmpty:                                                                 OK
>       ✓ stringEmpty passed 100 tests.
>   injective conversion
>     realToInteger:                                                             OK
>         ✓ realToInteger passed 100 tests.
>     bvToInteger:                                                               OK
>         ✓ bvToInteger passed 100 tests.
>     sbvToInteger:                                                              OK
>         ✓ sbvToInteger passed 100 tests.
>     predToBV:                                                                  OK
>         ✓ predToBV passed 100 tests.
>     integerToBV
>       bvToInteger (integerToBv x w) == mod x (2^w):                            OK
>           ✓ bvToInteger (integerToBv x w) == mod x (2^w) passed 100 tests.
>       bvToInteger (integerToBV x w) == x when 0 <= x < 2^w:                    OK
>           ✓ bvToInteger (integerToBV x w) == x when 0 <= x < 2^w passed 100 tests.
>       sbvToInteger (integerToBV x w) == mod (x + 2^(w-1)) (2^w) - 2^(w-1):     OK
>           ✓ sbvToInteger (integerToBV x w) == mod (x + 2^(w-1)) (2^w) - 2^(w-1) passed 100 tests.
>       sbvToInteger (integerToBV x w) == x when -2^(w-1) <= x < 2^(w-1):        OK
>           ✓ sbvToInteger (integerToBV x w) == x when -2^(w-1) <= x < 2^(w-1) passed 100 tests.
>       integerToBV (bvToInteger y) w == y when y is a SymBV sym w:              OK
>           ✓ integerToBV (bvToInteger y) w == y when y is a SymBV sym w passed 100 tests.
>       integerToBV (sbvToInteger y) w == y when y is a SymBV sym w:             OK
>           ✓ integerToBV (sbvToInteger y) w == y when y is a SymBV sym w passed 100 tests.
> 
> All 29 tests passed (0.06s)
> Test suite exprs_tests: PASS
> Test suite logged to: dist-ghc/test/what4-1.5.1-exprs_tests.log
> Test suite invariant-synthesis: RUNNING...
> SOLVER SELF-REPORTED VERSIONS::
>   Solver cvc5 -> This is cvc5 version 1.0.5
>   Solver z3 -> Z3 version 4.8.12 - 64 bit
> Tests
>   int cvc5 test: OK (0.07s)
>   int z3 test:   OK (0.12s)
>   bv cvc5 test:  OK (0.33s)
> 
> All 3 tests passed (0.52s)
> Test suite invariant-synthesis: PASS
> Test suite logged to: dist-ghc/test/what4-1.5.1-invariant-synthesis.log
> Test suite abduct: RUNNING...
> Tests
>   testing SAT query for abduction:      OK (0.02s)
>   getting 3 abducts using cvc5 offline: OK (0.57s)
>   getting 3 abducts using cvc5 online:  OK (0.76s)
> 
> All 3 tests passed (1.35s)
> Test suite abduct: PASS
> Test suite logged to: dist-ghc/test/what4-1.5.1-abduct.log
> 9 of 10 test suites (9 of 10 test cases) passed.
> -e: error: debian/hlibrary.setup test --builddir=dist-ghc --show-details=direct returned exit code 1
>  at /usr/share/perl5/Debian/Debhelper/Dh_Lib.pm line 880.
> 	Debian::Debhelper::Dh_Lib::error("debian/hlibrary.setup test --builddir=dist-ghc --show-details"...) called at /usr/share/perl5/Debian/Debhelper/Dh_Lib.pm line 610
> 	Debian::Debhelper::Dh_Lib::error_exitcode("debian/hlibrary.setup test --builddir=dist-ghc --show-details"...) called at /usr/share/perl5/Debian/Debhelper/Dh_Lib.pm line 473
> 	Debian::Debhelper::Dh_Lib::doit("debian/hlibrary.setup", "test", "--builddir=dist-ghc", "--show-details=direct") called at /usr/share/perl5/Debian/Debhelper/Buildsystem/Haskell/Recipes.pm line 692
> 	Debian::Debhelper::Buildsystem::Haskell::Recipes::check_recipe() called at -e line 1
> make: *** [/usr/share/cdbs/1/class/hlibrary.mk:163: check-ghc-stamp] Error 25


The full build log is available from:
http://qa-logs.debian.net/2023/10/27/haskell-what4_1.5.1-2_unstable.log

All bugs filed during this archive rebuild are listed at:
https://bugs.debian.org/cgi-bin/pkgreport.cgi?tag=ftbfs-20231027;users=lucas@debian.org
or:
https://udd.debian.org/bugs/?release=na&merged=ign&fnewerval=7&flastmodval=7&fusertag=only&fusertagtag=ftbfs-20231027&fusertaguser=lucas@debian.org&allbugs=1&cseverity=1&ctags=1&caffected=1#results

A list of current common problems and possible solutions is available at
http://wiki.debian.org/qa.debian.org/FTBFS . You're welcome to contribute!

If you reassign this bug to another package, please mark it as 'affects'-ing
this package. See https://www.debian.org/Bugs/server-control#affects

If you fail to reproduce this, please provide a build log and diff it with mine
so that we can identify if something relevant changed in the meantime.



More information about the Pkg-haskell-maintainers mailing list