# Enforce SemVer like Elm?

**URL:** <https://discourse.julialang.org/t/enforce-semver-like-elm/6026>\
**Category:** Internals & Design\
**Tags:** package\
**Created:** [September 21, 2017, 2:59pm UTC](https://discourse.julialang.org/t/enforce-semver-like-elm/6026 "2017-09-21T14:59:34Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![Kaiyin\_Zhong](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/kaiyin_zhong/32/1956_2.png) [@Kaiyin\_Zhong](https://discourse.julialang.org/u/Kaiyin_Zhong)\
**Post date:** [September 21, 2017, 2:59pm UTC](https://discourse.julialang.org/t/enforce-semver-like-elm/6026/1 "2017-09-21T14:59:34Z")

</div>

I played around with Elm a bit lately. It’s interesting that the package manager actually detects api changes and bumps version for you when incompatibility happens. Wouldn’t it be nice to have for Pkg3?

---

<div class="post-metadata">

**Author:** ![rdeits](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/rdeits/32/286_2.png) [@rdeits](https://discourse.julialang.org/u/rdeits)\
**Post date:** [September 21, 2017, 7:38pm UTC](https://discourse.julialang.org/t/enforce-semver-like-elm/6026/2 "2017-09-21T19:38:23Z")

</div>

Yeah, I think that could be really neat. I’ve thought about trying to write a tool to find, for a given package, a union of intervals of dependent packages for which the package works (i.e. for which the tests pass). It seems like in the worst case this would involve testing the package once for each element in the product of the available versions of all dependent packages. That might get expensive. Do you know how Elm actually does the testing?

---

<div class="post-metadata">

**Author:** ![Kaiyin\_Zhong](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/kaiyin_zhong/32/1956_2.png) [@Kaiyin\_Zhong](https://discourse.julialang.org/u/Kaiyin_Zhong)\
**Post date:** [September 21, 2017, 8:54pm UTC](https://discourse.julialang.org/t/enforce-semver-like-elm/6026/3 "2017-09-21T20:54:57Z")

</div>

It seems that the package manager checks type signatures of exposed functions for change:

[https://github.com/elm-lang/elm-package/blob/master/src/Diff/Compare.hs](https://github.com/elm-lang/elm-package/blob/master/src/Diff/Compare.hs)
