# Extend package methods / write add-ons

**URL:** <https://discourse.julialang.org/t/extend-package-methods-write-add-ons/77531>\
**Category:** General Usage\
**Tags:** package, structtypes, add-ons\
**Created:** [March 7, 2022, 5:22pm UTC](https://discourse.julialang.org/t/extend-package-methods-write-add-ons/77531 "2022-03-07T17:22:41Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![fipelle](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/fipelle/32/4772_2.png) [@fipelle](https://discourse.julialang.org/u/fipelle)\
**Post date:** [March 7, 2022, 5:22pm UTC](https://discourse.julialang.org/t/extend-package-methods-write-add-ons/77531/1 "2022-03-07T17:22:41Z")

</div>

Hi, I am trying to write an add-on for a package, but I am struggling with a – likely minor – issue.

Suppose that some package has a function

```julia
function foo(S1::Any)
    ....
    bar(S1)
    ....

```

and `bar(S1)` is defined within the package to accept only a limited number of datatypes. I am trying to extend `bar` in a separate Julia script (not included in the package) to accept more datatypes. I tried to implement it via

```julia
bar(S1::SomeOtherDatatype) = do something

```

but I am getting an error when using it in tandem with the package, because the latter is only looking at its own internal functions. What is the best way for implementing something like that?

---

<div class="post-metadata">

**Author:** ![Henrique\_Becker](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/henrique_becker/32/15443_2.png) [@Henrique\_Becker](https://discourse.julialang.org/u/Henrique_Becker)\
**Post date:** [March 7, 2022, 5:32pm UTC](https://discourse.julialang.org/t/extend-package-methods-write-add-ons/77531/2 "2022-03-07T17:32:20Z")

</div>

You probably should do:

```julia
PackageToBeExtended.bar(S1::SomeOtherDatatype) = do something

```

---

<div class="post-metadata">

**Author:** ![Sixzero](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/sixzero/32/28737_2.png) [@Sixzero](https://discourse.julialang.org/u/Sixzero)\
**Post date:** [February 26, 2024, 6:31pm UTC](https://discourse.julialang.org/t/extend-package-methods-write-add-ons/77531/3 "2024-02-26T18:31:09Z")

</div>

But doesn’t it break precompilation?

---

<div class="post-metadata">

**Author:** ![Henrique\_Becker](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/henrique_becker/32/15443_2.png) [@Henrique\_Becker](https://discourse.julialang.org/u/Henrique_Becker)\
**Post date:** [February 27, 2024, 9:06pm UTC](https://discourse.julialang.org/t/extend-package-methods-write-add-ons/77531/4 "2024-02-27T21:06:06Z")

</div>

Possibly, but I believe add-ons for other packages may always break precompilation, this is inescapable.
