# Defining a constructor for partially parameterized type

**URL:** <https://discourse.julialang.org/t/defining-a-constructor-for-partially-parameterized-type/1307>\
**Category:** General Usage\
**Tags:** question\
**Created:** [January 5, 2017, 5:40pm UTC](https://discourse.julialang.org/t/defining-a-constructor-for-partially-parameterized-type/1307 "2017-01-05T17:40:52Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![stevengj](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/stevengj/32/71_2.png) [@stevengj](https://discourse.julialang.org/u/stevengj)\
**Post date:** [January 5, 2017, 5:40pm UTC](https://discourse.julialang.org/t/defining-a-constructor-for-partially-parameterized-type/1307/1 "2017-01-05T17:40:52Z")

</div>

If I have a parameterized type `Foo{X,Y}`, how can I define a constructor for `Foo{X}` that assigns a default value to `Y`?

For example, the following didn’t work:

```julia
julia> type Foo{X,Y}; end
julia> (::Foo{X}){X}() = Foo{X,true}()

julia> Foo{Int}()
ERROR: MethodError: no method matching Foo{Int64,Y}()
Closest candidates are:
  Foo{Int64,Y}{T}(::Any) at sysimg.jl:53

```

---

<div class="post-metadata">

**Author:** ![stevengj](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/stevengj/32/71_2.png) [@stevengj](https://discourse.julialang.org/u/stevengj)\
**Post date:** [January 5, 2017, 6:03pm UTC](https://discourse.julialang.org/t/defining-a-constructor-for-partially-parameterized-type/1307/2 "2017-01-05T18:03:42Z")

</div>

Oh, nevermind, I just realized that I need:

```julia
(::Type{Foo{X}}){X}() = Foo{X,true}()

```

(I was missing the `Type`)

---

<div class="post-metadata">

**Author:** ![mzaffalon](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mzaffalon/32/214168_2.png) [@mzaffalon](https://discourse.julialang.org/u/mzaffalon)\
**Post date:** [January 6, 2017, 6:56am UTC](https://discourse.julialang.org/t/defining-a-constructor-for-partially-parameterized-type/1307/3 "2017-01-06T06:56:54Z")

</div>

The method `(::Type{Foo{X}}){X}()` is a constructor. What is `(::Foo{X}){X}()`?

---

<div class="post-metadata">

**Author:** ![cstjean](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/cstjean/32/1444_2.png) [@cstjean](https://discourse.julialang.org/u/cstjean)\
**Post date:** [January 6, 2017, 2:57pm UTC](https://discourse.julialang.org/t/defining-a-constructor-for-partially-parameterized-type/1307/4 "2017-01-06T14:57:01Z")

</div>

[http://docs.julialang.org/en/release-0.5/manual/methods/#function-like-objects](http://docs.julialang.org/en/release-0.5/manual/methods/#function-like-objects)
