> 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 [EMAIL PROTECTED] 31 Chalmers Road [EMAIL PROTECTED] Cambridge CB1 3SZ +44 1223 570179 (after 14:00 only, please!) _______________________________________________ Haskell mailing list [EMAIL PROTECTED] http://www.haskell.org/mailman/listinfo/haskell