Alain Cremieux wrote: I am trying to build a functional firewall generator. The first part describes the available protections (kernel, anti-address spoofing, etc.). The second desribes every protocol, and the necessary rules if the corresponding service is enabled (e.g. open the http port...). In the third one, the user will choose the services he wants to use/open and the static parameters (for instance the squid port number). I wanted the user part to be "user-friendly", even if it is an Haskell program. So the commands definePort "squidPort" 3128 Seemed more logical than definePort "squidPort" "3128"
The problem is that the numeric literal 3128 is considered as being a member of Num class, and not as beeing an Int. So I can't write a unique function which accepts 1) the string "3128" 2) the literal numeric 3128 3) the string "3128:3129"(if the user wants to give a port range, for instance)
I understand the problem, but I still don't see why you want strings here. [Int] would do. They'd just have to type [3218..3130] for a range of port numbers, and you can define ordinary variables: type Port = [Int] http:: Port http = [80] You'd have to have them type definePort "squidPort" [3128] and that allows giving a range of ports where only one port is required, but at least they are going to be constrained to be numbers. With this, portRange [3128.3129] will give a compile time error, where portRange "3128.3129" would have to be a run-time error. Jón -- Jón Fairbairn Jon.Fairbairn@cl.cam.ac.uk 31 Chalmers Road jf@cl.cam.ac.uk Cambridge CB1 3SZ +44 1223 570179 (after 14:00 only, please!)