# Switching off must\_be and friends

**URL:** <https://swi-prolog.discourse.group/t/switching-off-must-be-and-friends/3667>\
**Category:** Help!\
**Created:** [March 2, 2021, 9:30am UTC](https://swi-prolog.discourse.group/t/switching-off-must-be-and-friends/3667 "2021-03-02T09:30:44Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![grossdan](https://yyz2.discourse-cdn.com/free1/user_avatar/swi-prolog.discourse.group/grossdan/32/23_2.png) [@grossdan](https://swi-prolog.discourse.group/u/grossdan)\
**Post date:** [March 2, 2021, 9:30am UTC](https://swi-prolog.discourse.group/t/switching-off-must-be-and-friends/3667/1 "2021-03-02T09:30:44Z")

</div>

I seem to recall that its possible to remove all must\_be and friends from the code during compilation using a switch – i couldn’t find it in the documentation.

Do i recall this correct? If yes, what is the switch?

thanks

Dan

---

<div class="post-metadata">

**Author:** ![Boris](https://yyz2.discourse-cdn.com/free1/user_avatar/swi-prolog.discourse.group/boris/32/7486_2.png) [@Boris](https://swi-prolog.discourse.group/u/Boris)\
**Post date:** [March 2, 2021, 9:33am UTC](https://swi-prolog.discourse.group/t/switching-off-must-be-and-friends/3667/2 "2021-03-02T09:33:42Z")

</div>

Not sure, but could you be somehow mixing this up with assertion/1 from library(debug)?

---

<div class="post-metadata">

**Author:** ![grossdan](https://yyz2.discourse-cdn.com/free1/user_avatar/swi-prolog.discourse.group/grossdan/32/23_2.png) [@grossdan](https://swi-prolog.discourse.group/u/grossdan)\
**Post date:** [March 2, 2021, 9:35am UTC](https://swi-prolog.discourse.group/t/switching-off-must-be-and-friends/3667/3 "2021-03-02T09:35:22Z")

</div>

Perhaps, but i seem to recall that must\_be/2 can also be removed from compile – i may of course recall incorrectly.

---

<div class="post-metadata">

**Author:** ![Boris](https://yyz2.discourse-cdn.com/free1/user_avatar/swi-prolog.discourse.group/boris/32/7486_2.png) [@Boris](https://swi-prolog.discourse.group/u/Boris)\
**Post date:** [March 2, 2021, 9:43am UTC](https://swi-prolog.discourse.group/t/switching-off-must-be-and-friends/3667/4 "2021-03-02T09:43:03Z")

</div>

My understanding is that must\_be/2 and altogether library(error) is meant to do exactly that: do run-time checks and make it easier to throw the correct error.

---

<div class="post-metadata">

**Author:** ![grossdan](https://yyz2.discourse-cdn.com/free1/user_avatar/swi-prolog.discourse.group/grossdan/32/23_2.png) [@grossdan](https://swi-prolog.discourse.group/u/grossdan)\
**Post date:** [March 2, 2021, 9:44am UTC](https://swi-prolog.discourse.group/t/switching-off-must-be-and-friends/3667/5 "2021-03-02T09:44:20Z")

</div>

I see.

I thought its a development / debug aid.

But, perhaps i should use assert instead of must\_be – i guess, my intent is then better covered by assertion

---

<div class="post-metadata">

**Author:** ![grossdan](https://yyz2.discourse-cdn.com/free1/user_avatar/swi-prolog.discourse.group/grossdan/32/23_2.png) [@grossdan](https://swi-prolog.discourse.group/u/grossdan)\
**Post date:** [March 2, 2021, 9:47am UTC](https://swi-prolog.discourse.group/t/switching-off-must-be-and-friends/3667/7 "2021-03-02T09:47:25Z")

</div>

On the other hand – i don’t want the debugger to get started, since i want to trap exceptions during unit test run as well.

---

<div class="post-metadata">

**Author:** ![jan](https://yyz2.discourse-cdn.com/free1/user_avatar/swi-prolog.discourse.group/jan/32/4_2.png) [@jan](https://swi-prolog.discourse.group/u/jan)\
**Post date:** [March 2, 2021, 9:49am UTC](https://swi-prolog.discourse.group/t/switching-off-must-be-and-friends/3667/8 "2021-03-02T09:49:06Z")

</div>

A simple solution is

```
goal_expansion(must_be(_,_), true).
```

---

<div class="post-metadata">

**Author:** ![grossdan](https://yyz2.discourse-cdn.com/free1/user_avatar/swi-prolog.discourse.group/grossdan/32/23_2.png) [@grossdan](https://swi-prolog.discourse.group/u/grossdan)\
**Post date:** [March 2, 2021, 9:53am UTC](https://swi-prolog.discourse.group/t/switching-off-must-be-and-friends/3667/9 "2021-03-02T09:53:30Z")

</div>

> [@jan](#):
>
> `goal_expansion(must_be(_,_), true).`

I guess, I could do this for all such test code - to wrap them all into aux\_must\_be/1 – which can alternatively be expanded to true.

e.g. must\_be is only one example, somtimes I want a goal failure to cause an exception during debug time and during testing.
