[erlang-questions] Checking Types at Runtime

Tristan Sloughter tristan.sloughter@REDACTED
Wed Jul 13 16:27:34 CEST 2011


Great, thanks! This should help a lot.

On Wed, Jul 13, 2011 at 9:26 AM, Joseph Norton <norton@REDACTED>wrote:

>
> Tristan -
>
> It has been awhile since I dabbled with this code - it is an incomplete
> prototype to re-use a module's types as part of a UBF contract.
>  Nevertheless, there is a working unit test that illustrates using a parse
> transform on a module's types.
>
> The test module is here:
>
>
> https://github.com/norton/ubf-eep8/blob/master/test/eunit/ubf_eep8_samples.erl
>
> The unit test is here:
>
>
> https://github.com/norton/ubf-eep8/blob/master/test/eunit/ubf_eep8_samples_tests.erl
>
> The parse transform code is here:
>
> https://github.com/norton/ubf-eep8/blob/master/src/eep8_contract_parser.erl
>
> and finally instructions to download and to build are here:
>
> https://github.com/norton/ubf-eep8
>
> Hope this helps.
>
> - Joe N.
>
>
> On Jul 13, 2011, at 11:13 PM, Tristan Sloughter wrote:
>
> Yeah, I was hoping for something that would work with user defined typed.
>
> I assume parse transforms when parsing a record have the type information?
> If so I think I can use that to generate the necessary functionality I'm
> looking for.
>
> Tristan
>
> On Wed, Jul 13, 2011 at 4:42 AM, Torben Hoffmann <torben.lehoff@REDACTED>wrote:
>
>> For the basic types you can you a when guard in the function clauses (or
>> case clauses):
>>
>> my_magic(#user{password=PW}) when is_binary(PW) -> ...
>>
>> But that is probably not enough for you.
>>
>> Cheers,
>> Torben
>>
>> On Wed, Jul 13, 2011 at 01:26, Tristan Sloughter <
>> tristan.sloughter@REDACTED> wrote:
>>
>>> I'm pretty sure this isn't possible but I wanted to be sure before
>>> working around the lack of it.
>>>
>>> if I have a type and record like:
>>>
>>> -type password() :: binary().
>>>
>>> -record(user, {username :: binary(),
>>>                     password  :: password()}.
>>>
>>> At run time there is no way to tell a field is suppose to be of some type
>>> during runtime, right?
>>>
>>> Basically I'd like to be able to have generic or generated create
>>> functions for records that may have to modify arguments (like a password has
>>> to be encrypted from the string provided) when creating the record. So the
>>> create function would pass each field, its value and its type to a transform
>>> function that matches on type and returns the appropriately modified value.
>>>
>>> Any ideas on how to do this with type definitions or do I need to use
>>> tuples and an atom like {Type, Value} for the value of every field to
>>> achieve this?
>>>
>>> Thanks,
>>> Tristan
>>>
>>> _______________________________________________
>>> erlang-questions mailing list
>>> erlang-questions@REDACTED
>>> http://erlang.org/mailman/listinfo/erlang-questions
>>>
>>>
>>
>>
>> --
>> http://www.linkedin.com/in/torbenhoffmann
>>
>
> _______________________________________________
> erlang-questions mailing list
> erlang-questions@REDACTED
> http://erlang.org/mailman/listinfo/erlang-questions
>
>
> Joseph Norton
> norton@REDACTED
>
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20110713/89e1b79b/attachment.htm>


More information about the erlang-questions mailing list